在第一个屏幕截图中,users 集合中有许多文档。每个文档包含进一步的集合jobPost,并且该集合包含更多的文档及其元数据。
这里我想要的是去集合 users 和进一步的子集合 jobPost 的每个文档并获取所有的文件。 假设首先它应该去集合 users 中的文档 1,在文档 1 中它应该获取子集合 jobPost< 中的所有文档/em>然后它应该去集合users的第二个文档,然后获取子集合中的所有文档jobPost 等等。这种技术的查询或实现是什么
答案 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;
}