Flutter中Firestore带where条件的collectionGroup查询及数据获取方法
Firestore 集合组带条件查询正确实现
问题原因
- 你首次编写的代码仅构造了查询配置对象,没有真正发起网络请求获取数据,因此打印只会输出对象实例,无法拿到实际数据
getDocuments()是cloud_firestore0.14.0版本之前的废弃API,新版本已统一替换为get()方法
正确查询代码
Firestore的查询是异步操作,需要配合async/await或者then回调获取结果:
1. async/await写法
// 编写查询逻辑的函数需要添加async标识 void queryPaymentData() async { // 1. 构造集合组查询对象 final payQuery = FirebaseFirestore.instance.collectionGroup("payment").where("balance", isNotEqualTo: 0); // 2. 发起查询请求获取结果快照 final QuerySnapshot querySnapshot = await payQuery.get(); // 3. 遍历所有匹配的文档打印数据 for (QueryDocumentSnapshot doc in querySnapshot.docs) { // 打印完整文档数据,格式为Map<String, dynamic> print(doc.data()); // 可单独获取指定字段:print(doc.get("balance")); } }
2. then回调写法
FirebaseFirestore.instance .collectionGroup("payment") .where("balance", isNotEqualTo: 0) .get() .then((querySnapshot) { for (var doc in querySnapshot.docs) { print(doc.data()); } });
注意事项
- 集合组查询需要提前在Firebase控制台构建对应索引,运行时如果触发索引缺失报错,直接点击报错信息内的索引生成链接,等待索引构建完成即可正常使用
- 可以通过
querySnapshot.size直接获取匹配的文档总数量
内容的提问来源于stack exchange,提问作者swamper
相关产品推荐
相关产品推荐

