Flutter中如何查询Firestore嵌套在businessUsers下的campaigns集合
解决Firestore嵌套子集合的全局查询问题
嘿,我明白你遇到的问题了——你想查询所有businessUsers文档下的campaigns子集合中,campaignCategory匹配指定值的所有数据,但之前的写法不对,因为doc()没有指定具体的用户文档ID,Firestore不知道该遍历哪些子集合。
正确的解决方案:集合组查询
Firestore提供了集合组查询的功能,它可以帮你一次性查询所有同名的子集合(不管这些子集合属于哪个父文档)。具体代码如下:
return FirebaseFirestore.instance .collectionGroup('campaigns') // 目标是所有名为"campaigns"的子集合 .where('campaignCategory', isEqualTo: filterBusinessResult) .snapshots() .map(_campaignListFromSnapshot);
几个重要注意事项:
- 创建集合组索引:第一次运行这段代码时,你大概率会收到Firebase的报错,提示你需要创建对应的集合组索引。别担心,报错信息里会包含一个直接跳转Firestore控制台的链接,点击进去按照提示创建索引即可,这是集合组查询的必要步骤。
- 调整数据映射函数:你之前用的
_businessListFromSnapshot是用来处理businessUsers集合文档的,现在查询的是campaigns的文档结构,所以需要重新写一个对应的映射函数(比如_campaignListFromSnapshot),把查询到的campaign文档转换成你需要的模型对象。 - 关联父文档信息(可选):如果之后需要获取该campaign所属的businessUser信息,建议在每个
campaigns文档里额外存储一个businessUserId字段,这样就可以通过这个ID去查询对应的businessUsers文档,关联你需要的用户数据。
内容的提问来源于stack exchange,提问作者Netanel Hajaj
相关产品推荐
相关产品推荐

