MongoDB如何查询返回data数组所有对象status均为PASS的文档
MongoDB查询全匹配数组元素解决方案
错误原因分析
你之前编写的查询逻辑仅校验data数组中至少存在1个status为PASS的元素,只要满足该条件的文档就会被返回,因此包含FAIL状态的文档也会被命中,不符合预期。
正确查询语句
我们只需要对「存在status不为PASS的数组元素」这个逻辑取反,即可筛选出所有数组元素status均为PASS的文档:
db.Collection.aggregate({ $match: { "data": { $exists: true, $not: { $size: 0 }, $not: { $elemMatch: { "status": { $ne: "PASS" } } } } } })
逻辑说明
- 保留了原有
data字段存在且不为空的校验规则 - 新增的
$not: { $elemMatch: { "status": { $ne: "PASS" } } }规则表示:data数组中不存在任何status不等于PASS的元素,即所有元素的status都是PASS,完全符合筛选需求。
内容的提问来源于stack exchange,提问作者Jagadeesh
相关产品推荐
相关产品推荐

