MongoDB 5.0.6:查询user数组中country与originalCountry全匹配的文档
正确查询方案
你的需求是筛选出data.user数组中所有元素的country字段均等于同元素originalCountry字段的文档,以下是针对MongoDB 5.0.6的可行方案:
方法1:使用find()结合$not、$elemMatch和$expr
db.collection.find({ $not: { "data.user": { $elemMatch: { $expr: { $ne: ["$country", "$originalCountry"] } } } } })
方法2:使用聚合管道$match阶段
如果需要后续进行更多数据处理,也可以用聚合管道实现:
db.collection.aggregate([ { $match: { $not: { "data.user": { $elemMatch: { $expr: { $ne: ["$country", "$originalCountry"] } } } } } } ])
原查询的问题分析
- 字段引用错误:普通查询条件中,
$ne无法直接用字符串引用文档内的其他字段,必须通过$expr才能实现字段间的比较逻辑。 - 逻辑方向相反:你原查询是在查找**存在至少一个元素
country不等于originalCountry**的文档,和你需要的“所有元素均相等”的逻辑完全相反,因此返回结果不符合预期。
内容的提问来源于stack exchange,提问作者Doe
相关产品推荐
相关产品推荐

