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

MongoDB lookup操作as字段与首集合同级如何获取预期结果

解决方法

你可以通过$lookup + $concatArrays + $unwind + 字段投影的组合实现预期结果,聚合查询写法如下:

db.collection1.aggregate([
  // 可按需添加$match过滤条件,例如筛选nim为1234的记录
  {
    $match: { nim: 1234 }
  },
  // 关联collection2
  {
    $lookup: {
      from: "collection2",
      localField: "nim",
      foreignField: "nim",
      as: "col2List"
    }
  },
  // 将当前collection1的文档和关联到的collection2文档合并为一个数组
  {
    $project: {
      allDocs: {
        $concatArrays: [ ["$$CURRENT"], "$col2List" ]
      },
      _id: 0
    }
  },
  // 拆分数组得到单条文档
  {
    $unwind: "$allDocs"
  },
  // 提取docName字段,移除多余字段
  {
    $replaceRoot: {
      newRoot: { docName: "$allDocs.docName" }
    }
  }
])

补充说明

如果你不需要把两个集合的文档拆分为独立条目,只是希望$lookup返回的字段和原集合字段处于同一层级,可以把$lookup之后的步骤替换为$mergeObjects实现,适合1:1关联的场景:

// $lookup阶段之后添加如下步骤
{
  $replaceRoot: {
    newRoot: {
      $mergeObjects: [ "$$CURRENT", { $first: "$col2List" } ]
    }
  }
},
// 按需移除多余字段,比如col2List、_id、nim等
{ $project: { col2List: 0, _id: 0, nim: 0 } }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:08