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

如何在MongoDB中关联含字符串Object ID数组的两个集合

解决方案

你可以使用MongoDB的聚合管道,通过$lookup阶段关联两个集合,再用$project或$addFields调整输出格式,具体实现代码如下:

db.store.aggregate([
  {
    $lookup: {
      from: "Tag", // 目标关联集合名
      localField: "Tags", // store集合中用于匹配的标签ID数组字段
      foreignField: "_id", // Tag集合中对应的ID字段
      as: "TagResult" // 存储关联结果的字段名
    }
  },
  {
    $project: {
      // 保留原文档的核心字段
      _id: 1,
      name: 1,
      Tags: 1,
      updatedAt: 1,
      // 格式化TagResult,仅保留标签名称
      TagResult: {
        $map: {
          input: "$TagResult",
          as: "tag",
          in: { name: "$$tag.name" }
        }
      }
    }
  }
])

代码说明

  • $lookup阶段:自动匹配store集合Tags数组中的每个ID与Tag集合的_id,将匹配到的完整标签文档存入TagResult数组。
  • $project阶段:保留原文档的所有需要的字段,同时通过$map遍历关联得到的TagResult数组,只提取每个标签的name字段,转换成你需要的格式。

如果不需要保留updatedAt字段,可在$project中移除对应配置;若想直接新增TagResult字段而不修改原有字段结构,也可以用$addFields替代$project:

db.store.aggregate([
  {
    $lookup: {
      from: "Tag",
      localField: "Tags",
      foreignField: "_id",
      as: "TagResult"
    }
  },
  {
    $addFields: {
      TagResult: {
        $map: {
          input: "$TagResult",
          as: "tag",
          in: { name: "$$tag.name" }
        }
      }
    }
  }
])

执行上述聚合查询后,就能得到包含格式化TagResult数组的目标文档结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:57:39