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

如何在MongoDB聚合查询中移除数组内的重复值

解决方案

你有两种常见方式实现socialMedia数组去重:

方案1:直接在group阶段使用$addToSet替换$push

$addToSet是MongoDB专为分组时生成无重复元素数组设计的聚合算子,会自动忽略重复的添加值,修改后的聚合语句如下:

db.collection.aggregate([
  {
    "$group": {
      "_id": {
        "firstName": "$firstName",
        "lastName": "$lastName",
        "phoneNumber": "$phoneNumber",
        "DOB": "$DOB"
      },
      "count": {
        "$sum": 1
      },
      "socialMedia": {
        "$addToSet": "$socialMedia" // 替换原来的$push即可
      }
    }
  },
 {
    "$project": {
        "_id.firstName": 1,
        "_id.lastName": 1,
        "Count": "$count", // 补充别名映射,保证输出字段名符合你的原有格式
        "socialMedia": 1
    }
 }
])

方案2:在project阶段通过$setUnion去重

如果你需要保留原始带重复的数组同时额外输出去重结果,也可以保留$push逻辑,在project阶段对数组做去重处理:

db.collection.aggregate([
  {
    "$group": {
      "_id": {
        "firstName": "$firstName",
        "lastName": "$lastName",
        "phoneNumber": "$phoneNumber",
        "DOB": "$DOB"
      },
      "count": {
        "$sum": 1
      },
      "socialMedia": {
        "$push": "$socialMedia"
      }
    }
  },
 {
    "$project": {
        "_id.firstName": 1,
        "_id.lastName": 1,
        "Count": "$count",
        "socialMedia": { $setUnion: [ "$socialMedia", [] ] } // 对数组自身求并集实现去重
    }
 }
])

优先推荐方案1,性能更高,不需要额外的后续处理步骤,即可直接输出符合要求的无重复socialMedia数组。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:36:03