【问题标题】:How to get the root document which a subcollection document belongs to?如何获取子集合文档所属的根文档?
【发布时间】:2021-11-28 21:18:40
【问题描述】:
在获取子集合中特定文档的快照后,我想将关联数据获取到它所属的根文档。
例如,有一个集合 restaurants,每个集合都有一个 products 子集合。
搜索某餐厅的特定产品后,如何获取该产品所属的餐厅数据?我是否需要再次搜索或如何从产品快照中获取?
QuerySnapshot snapshot = await FirebaseFirestore.instance
.collectionGroup('products').get();
QueryDocumentSnapshot product = snapshot.docs.elementAt(0);
【问题讨论】:
标签:
firebase
flutter
dart
google-cloud-firestore
【解决方案1】:
要查找 product 的父/餐厅文档,您需要沿着参考/父链向上走:
var restaurantRef = product.reference.parent.parent;
您仍然需要get 该文档:
var restaurantDoc = await restaurantRef.get();
【解决方案2】:
实际上有一个非常简单的方法可以做到这一点,它利用了文档的 ref.path。您可以将 ref.path 字符串拆分为其组件部分 - 请记住,它是文档的完整“/”分隔路径,例如:
restaurants/{restaurantId}/products/{productId}
topCollection/{topdocumentId}/nextCollection/{nextDocumentId}/.../bottomCollection/{bottomDocumentId}
显然,前两个段是“父”文档的路径——不管树的深度(我碰巧有一个很深的树结构)。然后您可以获取“顶级父级”:
db.collection(topCollection).doc(topdocumentId).get()