Firestore中字段值为undefined时,如何正确设置WHERE查询子句?
Firestore查询
admin字段为undefined的用户失败问题解决 问题分析
你要获取user.admin字段为undefined(即字段不存在)的非管理员用户,但使用isEqualTo: null查询返回空快照,核心原因是:
Firestore中,isEqualTo: null虽理论上匹配字段不存在或字段值为null的文档,但实际查询可能因SDK版本、字段实际状态或写法细节失效;若你的非管理员用户admin字段是明确设置为false而非不存在,该查询也无法命中。
解决方案
方案1:精确匹配字段不存在/值为null的文档
使用isNull: true替代isEqualTo: null,写法更清晰且兼容性更好:
// 注意新版Firebase SDK需使用FirebaseFirestore而非Firestore CollectionReference cr = FirebaseFirestore.instance.collection('user'); QuerySnapshot qs = await cr.where('admin', isNull: true).get(); print(qs.size);
方案2:匹配所有非管理员用户(覆盖字段为false/不存在的情况)
如果管理员用户的admin字段明确为true,直接过滤掉admin=true的文档即可:
CollectionReference cr = FirebaseFirestore.instance.collection('user'); QuerySnapshot qs = await cr.where('admin', isNotEqualTo: true).get(); print(qs.size);
额外排查点
- 检查Firestore安全规则,确保当前用户拥有
user集合的读取权限 - 确认目标文档的
admin字段状态:确实不存在、为null或为false,而非其他值
内容的提问来源于stack exchange,提问作者stackunderflow
相关产品推荐
相关产品推荐

