【问题标题】: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()
      

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 2018-04-03
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 2014-06-10
        • 1970-01-01
        相关资源
        最近更新 更多