MongoDB查询:筛选数组非空且不包含自身_id的文档
MongoDB查询:排除数组包含自身_id的文档
方案1:使用find()结合$expr
直接通过$expr实现文档自身字段的对比,同时加上数组存在且非空的条件,就能精准筛选出目标文档:
db.yourCollection.find({ // 确保数组存在且不为空 internalProp: { $exists: true, $ne: [] }, // 判断自身_id不在internalProp数组中 $expr: { $not: { $in: ["$_id", "$internalProp"] } } })
方案2:聚合管道实现
如果后续需要对结果做进一步处理,用聚合管道的写法逻辑完全一致:
db.yourCollection.aggregate([ { $match: { internalProp: { $exists: true, $ne: [] }, $expr: { $not: { $in: ["$_id", "$internalProp"] } } } } ])
之前查询失败的原因
你之前尝试的$elemMatch+$nin思路行不通,因为$nin没办法直接引用当前文档的_id字段。而$expr是MongoDB专门用来在查询中使用聚合表达式的操作符,它允许你在查询条件里对比同一个文档的不同字段值,这正是解决这个问题的关键。
内容的提问来源于stack exchange,提问作者Stephanie Coy
相关产品推荐
相关产品推荐

