You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:54:54