You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 02:20:21