如何将子集合添加到 Firebase Cloud Firestore 中的文档

新手上路,请多包涵

该文档没有任何关于如何将子集合添加到文档的示例。我知道如何将文档添加到集合以及如何将数据添加到文档,但是如何将集合(子集合)添加到文档?

不应该有这样的方法:

 dbRef.document("example").addCollection("subCollection")

原文由 rgoncalv 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 406
1 个回答

2021 年 1 月 13 日编辑:

根据有关 数组成员资格 的更新文档,现在可以使用 whereArrayContains() 方法根据数组值过滤数据。一个简单的例子是:

 CollectionReference citiesRef = db.collection("cities");
citiesRef.whereArrayContains("regions", "west_coast");

此查询返回每个城市文档,其中 regions 字段是一个包含 west_coast 的数组。如果该数组具有您查询的值的多个实例,则该文档仅包含在结果中一次。


假设我们有一个聊天应用程序,其数据库结构类似于以下内容:

在此处输入图像描述

要在文档中写入 subCollection ,请使用以下代码:

 DocumentReference messageRef = db
    .collection("rooms").document("roomA")
    .collection("messages").document("message1");

如果你想创建 messages 收集和调用 addDocument() 1000 次肯定会很昂贵,但这就是 Firestore 的工作方式。如果需要,您可以切换到 Firebase 实时数据库,写入次数无关紧要。但是关于 Supported Data Types in Firestore,其实可以用数组,因为是支持的。在 Firebase 实时数据库 中,您还可以使用 array ,但这是一种反模式。 Firebase 不建议使用数组的众多原因之一是它使安全规则无法编写。

Cloud Firestore 可以存储数组,不支持查询数组成员或更新单个数组元素。但是,您仍然可以利用 Cloud Firestore 的其他功能对此类数据建模。 是解释得很好的文档。

您也不能创建包含 1000 条消息的子集合并将它们全部添加到数据库,同时考虑单个记录。每条消息都将被视为一次写操作。总共 1000 次操作。上图没有显示如何检索数据,它显示了一个数据库结构,其中你有这样的东西:

 collection -> document -> subCollection -> document

原文由 Alex Mamo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题