如何构建查询返回包含指定数组全部元素的文档?
解决Firestore数组包含所有指定元素的查询问题
你遇到的问题很典型:array-contains只能匹配包含单个指定元素的数组,in操作符是匹配包含任意一个指定元素的数组,都没法实现「必须包含所有指定元素」的需求。
要实现这个查询,你需要对subjectsToCompare里的每个元素单独使用array-contains,然后通过链式调用把这些条件组合起来(逻辑与关系),代码示例如下(以JavaScript为例):
// 目标对比数组 const subjectsToCompare = ["Computer Science","Mathematics"]; // 初始化查询 let studentQuery = db.collection('students'); // 给每个科目添加array-contains条件 subjectsToCompare.forEach(subject => { studentQuery = studentQuery.where('subjects', 'array-contains', subject); }); // 执行查询 const querySnapshot = await studentQuery.get(); // 遍历结果 querySnapshot.forEach(doc => { console.log(doc.id, "=>", doc.data()); });
这个逻辑的核心是:每个where条件都强制要求文档的subjects数组包含对应的科目,多个条件叠加后,只有同时满足所有条件的文档才会被返回——也就是subjects数组包含subjectsToCompare里的所有元素,同时允许包含其他额外科目。
内容的提问来源于stack exchange,提问作者WasayAK117
相关产品推荐
相关产品推荐

