如何在 Firebase Cloud Firestore 中向文档添加子集合
该文档不包含有关如何向文档添加子集合的任何示例。我知道如何将文档添加到集合以及如何向文档添加数据,但是如何将集合(子集合)添加到文档?
不应该有这样的方法吗:
dbRef.document("example").addCollection("subCollection")
该文档不包含有关如何向文档添加子集合的任何示例。我知道如何将文档添加到集合以及如何向文档添加数据,但是如何将集合(子集合)添加到文档?
不应该有这样的方法吗:
dbRef.document("example").addCollection("subCollection")
编辑13 Jan 2021:
根据有关数组成员资格的更新文档,现在可以使用方法根据数组值筛选数据。一个简单的例子是: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");
如果你想创建集合并调用1000次肯定会很昂贵,但这就是Firestore的工作方式。如果需要,您可以切换到 Firebase 实时数据库,其中写入次数无关紧要。但是关于Firestore中支持的数据类型,实际上,您可以使用数组,因为它是受支持的。在 Firebase 实时数据库中,您也可以使用 ,但这是一种反模式。Firebase 建议不要使用数组的众多原因之一是,它使安全规则无法编写。messages
addDocument()
array
Cloud Firestore可以存储数组,它不支持查询数组成员或更新单个数组元素。但是,您仍然可以通过利用 Cloud Firestore 的其他功能对此类数据进行建模。这是解释得很好的文档。
也不能创建包含 1000 条消息的子集合,然后将所有这些消息添加到数据库中,同时考虑单个记录。对于每条消息,它将被视为一个写入操作。总共 1000 次操作。上图没有显示如何检索数据,它显示了一个数据库结构,其中您具有如下内容:
collection -> document -> subCollection -> document
下面是一个变体,其中子集合在集合级别存储 ID 值,而不是在文档中存储子集合是包含其他数据的字段。
这对于连接一对多 ID 映射非常有用,而不必钻取其他文档:
function fireAddStudentToClassroom(studentUserId, classroomId) {
var db = firebase.firestore();
var studentsClassroomRef =
db.collection('student_class').doc(classroomId)
.collection('students');
studentsClassroomRef
.doc(studentUserId)
.set({})
.then(function () {
console.log('Document Added ');
})
.catch(function (error) {
console.error('Error adding document: ', error);
});
}
感谢@Alex的回答
这个答案与此处的原始问题略有不同,在原始问题中,它明确要求向文档添加集合。但是,在搜索了这种情况的解决方案并且没有在文档或SO上找到任何提及之后,这篇文章似乎是分享调查结果的合理场所