从 firestore flutter 中的子集合获取数据

时间:2021-05-12 01:10:50

标签: firebase flutter dart google-cloud-firestore

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

enter image description here

enter image description here

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

执行查询时,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(...);
        });
    });

答案 2 :(得分:0)

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

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;
  }