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

MongoDB查询A集合中_id存在于B集合的原始文档(无多余join字段)

解决方案

你可以在原有聚合语句基础上增加$match过滤和字段剔除步骤,最终可用代码如下:

db.getCollection('A').aggregate([
  {
    $lookup: {
      from: "B",
      localField: "_id",
      foreignField: "_id",
      as: "bid",
    }
  },
  // 过滤出B集合中存在对应_id的A文档
  {
    $match: {
      bid: { $ne: [] }
    }
  },
  // 移除临时关联字段,返回A集合原始结构
  {
    $project: {
      bid: 0
    }
  }
])

逻辑说明

  • 原有$lookup阶段完成A、B集合的_id关联后,没有匹配项的文档bid字段会是空数组,我们正是通过这个特征做筛选
  • 如果你使用的是MongoDB 4.2及以上版本,也可以把最后一步的$project替换为更简洁的$unset: "bid",效果完全一致
  • 如果是MongoDB 5.0以上版本,还可以在$lookup的pipeline中加$limit: 1,减少不必要的查询性能消耗:
db.getCollection('A').aggregate([
  {
    $lookup: {
      from: "B",
      localField: "_id",
      foreignField: "_id",
      as: "bid",
      pipeline: [ { $limit: 1 } ]
    }
  },
  { $match: { bid: { $ne: [] } } },
  { $unset: "bid" }
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:06:01