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

MongoDB中如何通过引用ID对对象数组执行lookup关联并保留其他属性

MongoDB 嵌套引用数组关联查询实现方案

需求说明

需要对collectionA中嵌套的refs数组,通过数组内对象的id字段关联collectionB的_id字段,将collectionB中对应的name字段合并到refs的对应对象中,返回指定格式的结果。

实现代码

直接执行如下聚合查询即可得到预期结果:

db.collectionA.aggregate([
  // 关联collectionB,获取所有匹配的B集合文档存入临时字段b_docs
  {
    $lookup: {
      from: "collectionB",
      localField: "refs.id",
      foreignField: "_id",
      as: "b_docs"
    }
  },
  // 重构refs数组,合并B集合的name字段
  {
    $addFields: {
      refs: {
        $map: {
          input: "$refs",
          as: "ref",
          in: {
            $mergeObjects: [
              "$$ref",
              {
                // 匹配当前ref.id对应的B集合文档的name字段
                name: {
                  $arrayElemAt: [
                    "$b_docs.name",
                    { $indexOfArray: ["$b_docs._id", "$$ref.id"] }
                  ]
                }
              }
            ]
          }
        }
      }
    }
  },
  // 删除临时关联字段,返回需要的字段
  {
    $project: {
      b_docs: 0
    }
  }
])

兼容说明

上述写法兼容MongoDB 3.2及以上版本,无需高版本语法支持。如果是MongoDB 4.4及以上版本,也可以使用$getField语法替换name字段的取值逻辑,效果完全一致。


内容的提问来源于stack exchange,提问作者Vu Le Anh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:45:07