【发布时间】:2020-04-29 20:38:45
【问题描述】:
我正在尝试获取其子集合包含特定文档 ID 的所有文档。有没有办法做到这一点?
例如,如果 'enquiries' 子集合下的盒装文档存在,那么我需要来自 'books' 集合的盒装文档 ID。我不知道如何向后获取父文档 ID。
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore
我正在尝试获取其子集合包含特定文档 ID 的所有文档。有没有办法做到这一点?
例如,如果 'enquiries' 子集合下的盒装文档存在,那么我需要来自 'books' 集合的盒装文档 ID。我不知道如何向后获取父文档 ID。
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore
我假设所有子集合都具有相同的名称,即enquiries。然后,您可以执行以下操作:
enquiries 文档中添加字段 docId。docId 值(Firestore.instance.collectionGroup("enquiries").where("docId", isEqualTo: "ykXB...").getDocuments()) 的所有文档。DocumentReference,您调用两次parent() 方法(first time,您将获得CollectionReference 和second time,您将获得DocumentReference父文档)。【讨论】:
尝试以下方法:
Firestore.instance.collection("books").where("author", isEqualTo: "Arumugam").getDocuments().then((value) {
value.documents.forEach((result) {
var id = result.documentID;
Firestore.instance.collection("books").document(id).collection("enquiries").getDocuments().then((querySnapshot) {
querySnapshot.documents.forEach((result) {
print(result.data);
});
首先,您需要检索 books 集合下的 id,为了能够做到这一点,您必须进行查询,例如 where("author", isEqualTo: "Arumugam")。检索到 id 后,您可以进行查询以检索集合内的文档 enquiries
【讨论】:
例如,如果 'enquiries' 子集合下的盒装文档存在,那么我需要来自 'books' 集合的盒装文档 ID。
你不可能一次完成。
我不知道如何向后获取父文档 ID。
您可能想,Firestore 没有回头路了。在 Firebase 实时数据库中,我们有一个名为 getParent() 的方法,它完全符合您的要求,但在 Firestore 中我们没有。
Firestore 中的查询很浅,这意味着它仅从运行查询的集合中获取项目。 Firestore 不支持一次性跨不同集合进行查询。单个查询只能使用单个集合中文档的属性。因此,解决您的问题的解决方案是执行两个get() 调用。第一个是检查enquiries 子集合中是否存在该文档,如果存在,只需创建另一个get() 调用以从books 集合中获取文档。
【讨论】: