【问题标题】:Is it possible to fetch all documents whose sub-collection contains a specific document ID?是否可以获取其子集合包含特定文档 ID 的所有文档?
【发布时间】:2020-04-29 20:38:45
【问题描述】:

我正在尝试获取其子集合包含特定文档 ID 的所有文档。有没有办法做到这一点?

例如,如果 'enquiries' 子集合下的盒装文档存在,那么我需要来自 'books' 集合的盒装文档 ID。我不知道如何向后获取父文档 ID。

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    我假设所有子集合都具有相同的名称,即enquiries。然后,您可以执行以下操作:

    1. 在包含文档 ID 的 enquiries 文档中添加字段 docId
    2. 执行Collection Group query 以获取具有所需docId 值(Firestore.instance.collectionGroup("enquiries").where("docId", isEqualTo: "ykXB...").getDocuments()) 的所有文档。
    3. 然后,您循环查询结果,对于每个DocumentReference,您调用两次parent() 方法(first time,您将获得CollectionReferencesecond time,您将获得DocumentReference父文档)。
    4. 您只需使用id 属性即可。

    【讨论】:

      【解决方案2】:

      尝试以下方法:

      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

      【讨论】:

        【解决方案3】:

        例如,如果 'enquiries' 子集合下的盒装文档存在,那么我需要来自 'books' 集合的盒装文档 ID。

        你不可能一次完成。

        我不知道如何向后获取父文档 ID。

        您可能想,Firestore 没有回头路了。在 Firebase 实时数据库中,我们有一个名为 getParent() 的方法,它完全符合您的要求,但在 Firestore 中我们没有。

        Firestore 中的查询很浅,这意味着它仅从运行查询的集合中获取项目。 Firestore 不支持一次性跨不同集合进行查询。单个查询只能使用单个集合中文档的属性。因此,解决您的问题的解决方案是执行两个get() 调用。第一个是检查enquiries 子集合中是否存在该文档,如果存在,只需创建另一个get() 调用以从books 集合中获取文档。

        【讨论】:

        • 嘿,是的!我可以帮助您了解其他信息吗?
        猜你喜欢
        • 1970-01-01
        • 2020-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2020-05-26
        • 2020-01-22
        相关资源
        最近更新 更多