【问题标题】:Get data from subcollection in firestore flutter从 Firestore Flutter 的子集合中获取数据
【发布时间】:2021-08-02 08:57:30
【问题描述】:

在第一个屏幕截图中,集合中有许多文档用户。每个文档都包含更多集合jobPost,并且该集合包含更多文档及其元数据。

我在这里想要的是转到集合 users 的每个文档以及进一步的子集合 jobPost 并获取所有文件。 假设首先它应该转到集合users中的文档1,在文档1中它应该获取子集合jobPost中的所有文档网 那么它应该转到集合 users 的第二个文档,然后获取子集合中的所有文档 jobPost em> 等等。这种技术的查询或实现是什么

【问题讨论】:

  • Firebase 实时数据库和 Cloud Firestore 是两个独立的数据库。请仅使用相关标签标记您的问题,不要同时使用两者。

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

** 如果您在第一个集合文档中没有字段,那么它显示斜体,这意味着默认情况下它的 delte 否则如果您在第一个集合文档中有字段,那么您可以轻松访问它,所以这是我分享的最佳方式 **

static Future<List<PostSrc>> getAllFeedPosts()async
  {
    List<PostSrc> allPosts = [];
    var query= await FirebaseFirestore.instance.collection("posts").get();
    for(var userdoc in query.docs)
      {
        QuerySnapshot feed = await FirebaseFirestore.instance.collection("posts")
            .doc(userdoc.id).collection("userPosts").get();
        for (var postDoc in feed.docs ) {
          PostSrc post = PostSrc.fromDoc(postDoc);
          allPosts.add(post);
        }
      }
    return allPosts;
  }

【讨论】:

    【解决方案2】:

    执行查询时,Firestore 会返回 QuerySnapshot 或 DocumentSnapshot。

    从集合查询中返回 QuerySnapshot 并允许您检查集合。

    要访问 QuerySnapshot 中的文档,请调用 docs 属性,该属性会返回一个包含 DocumentSnapshot 类的列表。

    但子集合数据不包含在文档快照中,因为 Firestore 查询很浅。您必须使用子集合名称进行新查询才能获取子集合数据。

    FirebaseFirestore.instance
        .collection('users')
        .get()
        .then((QuerySnapshot querySnapshot) {
            querySnapshot.docs.forEach((doc) {
                FirebaseFirestore.instance
                   .document(doc.id)
                   .collection("jobPost")
                   .get()
                   .then(...);
            });
        });
    

    【讨论】:

      【解决方案3】:

      您所描述的内容称为collection group query,它允许您查询具有特定名称的所有集合。与名称所暗示的不同,您实际上可以通过以下方式读取所有名为 jobPost 的子集合中的所有文档:

      FirebaseFirestore.instance.collectionGroup('jobPost').get()...
      

      【讨论】:

      • 我不确定你的意思。如果您已尝试收集组查询但无法正常工作,请将您的问题编辑至show what you tried
      • 我刚刚重新启动,它正在工作,谢谢伙计
      • 你能告诉我如何使用 orderBy 的不等式查询,例如 (_firestore .collection('workerField') .where('uid', isNotEqualTo: getCurrentUser().uid) .orderBy('orderBy ', 降序: true);)
      • .where 和 .orderBy 应该在 .得到
      猜你喜欢
      • 2020-06-08
      • 2020-09-05
      • 2020-02-03
      • 1970-01-01
      • 2022-01-17
      • 2020-11-26
      • 2021-10-31
      • 2019-07-16
      • 2020-04-29
      相关资源
      最近更新 更多