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

MongoDB如何按group字段分组去重后聚合拼接name字段值

MongoDB聚合实现按分组拆分去重拼接字段

完整聚合查询语句

db.yourCollectionName.aggregate([
  // 拆分name字段为数组,分隔符为分号加空格
  {
    $project: {
      group: 1,
      nameItem: { $split: ["$name", "; "] }
    }
  },
  // 展开数组,将每个值拆分为独立文档
  { $unwind: "$nameItem" },
  // 按group分组,用$addToSet自动去重收集所有name值
  {
    $group: {
      _id: "$group",
      uniqueNameList: { $addToSet: "$nameItem" }
    }
  },
  // 调整字段格式,拼接为目标字符串
  {
    $project: {
      _id: { $newObjectId: {} }, // MongoDB 5.0及以上版本支持自动生成新的ObjectId,低版本可删除该行直接使用group值作为_id
      group: "$_id",
      name: { $join: ["; ", "$uniqueNameList"] }
    }
  }
])

步骤说明

  • 第一步$project:将原本用; 分隔的name字符串拆分为数组,方便后续处理单个取值
  • 第二步$unwind:将每个数组成员拆分为独立的单值文档,为分组去重做准备
  • 第三步$group:按group字段分组,$addToSet会自动对同组内的重复值做过滤,得到去重后的名称数组
  • 第四步$project:将去重后的数组用; 重新拼接为字符串,同时调整字段顺序、生成新的_id字段

低版本兼容方案

如果使用的MongoDB版本低于4.4,不支持$join操作符,可以将最后一步的name字段替换为$reduce实现拼接:

name: {
  $reduce: {
    input: "$uniqueNameList",
    initialValue: "",
    in: {
      $cond: [
        { $eq: ["$$value", ""] },
        "$$this",
        { $concat: ["$$value", "; ", "$$this"] }
      ]
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:54:04