2021 年 1 月 13 日编辑:
根据有关更新的文档数组成员资格 https://firebase.google.com/docs/firestore/query-data/queries#array_membership,现在可以使用基于数组值过滤数据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 实时数据库。但关于支持的数据类型 https://firebase.google.com/docs/firestore/manage-data/data-types在Firestore中,事实上,你可以使用数组,因为它是支持的。在Firebase 实时数据库 https://firebase.google.com/docs/database/android/read-and-write你也可以使用array
,但这是一种反模式。 Firebase 建议不要使用数组的众多原因之一是它使安全规则无法编写。
Cloud Firestore 可以存储数组,但不支持查询数组成员或更新单个数组元素。不过,您仍然可以利用 Cloud Firestore 的其他功能对此类数据进行建模。Here https://firebase.google.com/docs/firestore/solutions/arrays是文档,对此进行了很好的解释。
您也无法创建包含 1000 条消息的子集合,将它们全部添加到数据库中,并期望将其视为单个记录。每条消息将被视为一次写入操作,总共 1000 次操作。上图没有显示如何检索数据,它显示了一个数据库结构,其中有这样的内容:
collection -> document -> subCollection -> document