Firebase查询问题:如何获取不存在permitted字段的Users数据?
如何查询Firebase Firestore中缺失
permitted字段的用户文档 你遇到的问题是用where('permitted', '==', null)查不到目标文档,这可能是因为查询执行逻辑有问题,或者对Firestore的查询规则理解有偏差。下面是针对你数据集的可行解决方案:
为什么原查询返回空?
Firestore中where('field', '==', null)确实会匹配两种情况:字段值为null,或者字段根本不存在。但如果你的查询没有正确等待异步结果,或者数据库安全规则限制了读取权限,就会返回空数组。另外,如果你混淆了Firestore和实时数据库的API,也可能导致查询失效。
可行的查询方法
方法1:用not-in排除已知值
既然你的文档里permitted只有true/false两种存在的情况,直接排除这两类文档,剩下的就是缺失字段的目标文档:
import { query, where } from "firebase/firestore"; // 排除permitted为true或false的文档 const waitListQuery = query(usersColRef, where('permitted', 'not-in', [true, false]));
执行查询时要记得用await获取异步结果:
import { getDocs } from "firebase/firestore"; const snapshot = await getDocs(waitListQuery); const targetUsers = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); console.log(targetUsers); // 输出所有无permitted字段的用户
方法2:修正== null的查询执行
如果想继续用== null,确保正确执行异步查询,同时检查权限:
import { query, where, getDocs } from "firebase/firestore"; const waitListQuery = query(usersColRef, where('permitted', '==', null)); const snapshot = await getDocs(waitListQuery); if (snapshot.empty) { // 先检查Firestore安全规则是否允许读取users集合 // 再确认数据库中确实存在无permitted字段的文档 console.log("未找到匹配文档"); } else { const targetUsers = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); console.log(targetUsers); }
额外检查点
- 验证Firestore安全规则:确保规则允许你读取
users集合的所有文档,比如:rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /users/{userId} { allow read: if true; // 根据实际需求调整权限 } } } - 如果你用的是实时监听
onSnapshot,逻辑和getDocs一致,只需把await getDocs换成监听回调即可。
内容的提问来源于stack exchange,提问作者user20985280
相关产品推荐
相关产品推荐

