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
相关产品推荐
相关产品推荐

