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

Firestore如何获取categories字段为空Map的所有文档?

查询Firestore中categories为空Map的文档

我之前也碰到过类似的问题,Firestore对空Map的查询确实得注意它和字段不存在、null值的区别。针对你的需求——获取categories字段是空Map(即categories: {})的文档,最直接的方法是直接匹配空对象:

db.collection('posts').where('categories', '==', {}).get()
  .then((querySnapshot) => {
    // 处理查询结果
    querySnapshot.forEach((doc) => {
      console.log(`${doc.id} => ${JSON.stringify(doc.data())}`);
    });
  })
  .catch((error) => {
    console.error('获取文档时出错:', error);
  });

关键注意事项:

  • 这个查询只会匹配明确存在categories字段且其值是空Map的文档。如果你的集合里有文档根本没有categories字段,或者categories的值是null,这些文档不会被包含在结果里。
  • 如果你需要同时包含没有categories字段的文档,Firestore不支持在同一个字段上同时使用== {}和exists: false的复合查询,这种情况下你需要发起两个独立的查询,然后合并结果。比如:
// 查询空Map的文档
const emptyMapQuery = db.collection('posts').where('categories', '==', {}).get();
// 查询无categories字段的文档
const noFieldQuery = db.collection('posts').where('categories', 'not-in', []).get();

// 合并两个查询结果
Promise.all([emptyMapQuery, noFieldQuery])
  .then(([emptySnapshot, noFieldSnapshot]) => {
    const allDocs = [...emptySnapshot.docs, ...noFieldSnapshot.docs];
    allDocs.forEach(doc => {
      console.log(`${doc.id} => ${JSON.stringify(doc.data())}`);
    });
  })
  .catch(error => {
    console.error('查询出错:', error);
  });

不过回到你的原始需求,只需要筛选空Map的文档,第一个方法就完全够用了。

内容的提问来源于stack exchange,提问作者JackH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:31:10