如何在 Firestore 中设置外键?

jha*_*ane 10 java android firebase google-cloud-firestore

例如,考虑一个电子商务应用程序,其中用户可以上传尽可能多的项目,并且这些项目具有类别和子类别。

如何在发布的每个项目中将 user_id 设置为外键,以及在用户集合中设置 item_id 以查询特定用户发布的所有项目。

我们如何利用Firestore 中的引用数据类型来设置外键?

还有其他设置外键的方法吗?

数据库结构:

Users/doc_id/name..

Categories/fashion/clothing/auto_doc_id/type:denims
Run Code Online (Sandbox Code Playgroud)

Ale*_*amo 10

为了查询特定用户发布的所有项目。

为此,无需在发布的每个项目中将 user_id 设置为外键,也无需在用户集合中将 item_id 设置为外键。您只能向命名的项目对象添加一个新属性,该属性postedBy将作为用户 ID 的值。要仅显示特定用户的项目,您需要使用以下代码查询数据库:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference itemsRef = rootRef.collection("items");
Query query = itemsRef.whereEqualTo("postedBy", user_id);
Run Code Online (Sandbox Code Playgroud)

还有另一种方法涉及复制数据。对于 Firebase,这种技术没有问题。这是一种非常普遍的做法,因此得名denormalization,我建议您观看此视频,Firebase 数据库的非规范化是正常的。这适用于 Firebase 实时数据库,但该概念同样适用于 Cloud Firestore。

换句话说,您可以创建一个新集合,您可以在其中存储特定用户添加的所有项目。数据库结构应如下所示:

Firestore-root
     |
     --- users (collecton)
          |
          --- userId (document)
                 |
                 --- userItems (collecton)
                        |
                        --- itemId (document)
Run Code Online (Sandbox Code Playgroud)

当您复制数据时,需要记住一件事。与添加数据的方式相同,您需要维护它。换句话说,如果你想更新/删除一个项目,你需要在它存在的每个地方都做。