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

MongoDB中如何基于另一个集合的字段查询匹配记录

MongoDB 关联查询实现方案

你描述的MySQL inner join关联逻辑,在MongoDB 3.2及以上版本可以通过聚合管道的$lookup操作符实现,具体实现代码和说明如下:

实现代码

db.A.aggregate([
  // 优先过滤主集合数据,减少后续计算量,对应SQL where id=12
  {
    $match: {
      id: 12
    }
  },
  // 集合关联逻辑,对应SQL inner join b on a.id = b.id
  {
    $lookup: {
      from: "B", // 关联的目标集合名称
      localField: "id", // 主集合A的关联字段
      foreignField: "id", // 被关联集合B的关联字段
      as: "matched_b_data" // 匹配到的B集合数据会存入该数组字段
    }
  },
  // 过滤关联无结果的文档,实现*inner join*效果($lookup默认是左外连接,不加这一步会返回A集合匹配到但B无关联的文档)
  {
    $match: {
      matched_b_data: { $ne: [] }
    }
  },
  // 可选步骤:如果需要和SQL select *一样将B集合字段平铺到外层,添加以下3个阶段
  {
    $unwind: "$matched_b_data"
  },
  {
    $replaceRoot: {
      newRoot: { $mergeObjects: ["$$ROOT", "$matched_b_data"] }
    }
  },
  {
    $unset: "matched_b_data"
  }
])

注意事项

  • 确保两个集合的关联字段类型完全一致,比如如果id是ObjectId类型,不要用数字类型值查询,否则会匹配失败
  • 建议提前给A、B集合的关联字段创建索引,且将$match阶段放在聚合最前,可大幅提升查询效率
  • 如果不需要平铺B集合字段,直接删除最后三个可选阶段即可,返回结果会保留A集合原有结构,匹配到的B数据统一存在matched_b_data数组中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:06:01