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

如何提取MongoDB集合字段去重值并映射到另一集合对应字段

MongoDB跨集合字段匹配映射实现方案

核心实现逻辑

  • 先对集合1的指定关联字段(示例中为Name)去重,得到唯一值列表
  • 通过聚合管道的$lookup操作关联集合2,匹配相同关联字段的记录
  • 对关联后的结果二次去重,最终输出需要的关联字段和目标字段组合

完整查询代码

db.collection1.aggregate([
  // 对集合1的Name字段去重,获取所有唯一姓名
  {
    $group: {
      _id: "$Name"
    }
  },
  // 关联集合2,匹配相同Name的记录
  {
    $lookup: {
      from: "collection2",
      localField: "_id",
      foreignField: "Name",
      as: "expiry_info"
    }
  },
  // 展开关联得到的数组
  {
    $unwind: "$expiry_info"
  },
  // 对Name+Expiry组合去重,剔除重复数据
  {
    $group: {
      _id: {
        Name: "$_id",
        Expiry: "$expiry_info.Expiry"
      }
    }
  },
  // 调整输出格式,隐藏默认_id字段
  {
    $project: {
      _id: 0,
      Name: "$_id.Name",
      Expiry: "$_id.Expiry"
    }
  }
])

输出结果

针对你提供的示例数据,运行上述查询后得到如下结果:

[
  { "Name": "Radan", "Expiry": "2021-08-09" },
  { "Name": "Dammy", "Expiry": "2021-08-07" }
]

补充说明

如果集合2中同一个Name对应多个不同的Expiry值,上述代码会全部输出;如果仅需要获取最新的有效期,可以将第四步的$group修改为按Name分组,用$max操作符取最大的Expiry值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:39:03