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

如何使用MongoDB聚合匹配仅存在于集合A而非集合B的文档

如何用MongoDB聚合操作筛选仅存在于集合A但不存在于集合B的文档

要实现这个需求,你可以通过MongoDB聚合框架的$lookup、$match和$project阶段组合完成,具体操作如下:

完整聚合代码

db.collectionA.aggregate([
  // 关联集合B,匹配_id相同的文档
  {
    $lookup: {
      from: "collectionB",
      localField: "_id",
      foreignField: "_id",
      as: "matchedDocs"
    }
  },
  // 筛选出集合B中无匹配的文档
  {
    $match: {
      matchedDocs: { $size: 0 }
    }
  },
  // 移除临时生成的matchedDocs字段
  {
    $project: {
      matchedDocs: 0
    }
  }
])

各阶段说明

  • $lookup:将集合A的每个文档与集合B中_id字段相同的文档进行关联,关联结果会存入新增的matchedDocs数组。如果集合B中没有匹配的文档,这个数组会是空的。
  • $match:通过$size: 0筛选出matchedDocs为空的文档,这些就是仅存在于集合A、不存在于集合B的目标文档。
  • $project:移除聚合过程中生成的matchedDocs字段,让输出文档结构和原集合A的文档一致。

示例验证

用你提供的集合数据运行上述聚合操作后,会得到预期结果:

[
    {
        "_id": 3,
        "operation": "SEC",
        "name": "z"
    }
]

扩展说明

如果你的匹配条件不是_id(比如用name字段匹配),只需修改$lookup中的localField和foreignField为对应的字段名即可,适配不同的业务场景。

内容的提问来源于stack exchange,提问作者dipta kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:01:02