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

MongoDB应使用什么聚合函数删除empId与enrollDate重复记录

MongoDB 重复数据删除方案

要实现按empId和enrollDate去重,你需要用到MongoDB的$group聚合算子,具体操作如下:

操作步骤

1. 确认待保留的记录ID

首先通过聚合查询,按empId和enrollDate分组,每组保留1条记录的ID:

// 执行聚合得到所有需要保留的记录ID
const keepIdList = db.你的集合名.aggregate([
  {
    $group: {
      _id: {
        empId: "$empId",
        enrollDate: "$enrollDate"
      },
      // 每组取第一条记录的_id作为保留ID,想保留最晚插入的就换成$last
      reservedId: { $first: "$_id" }
    }
  },
  { $project: { _id: 0, reservedId: 1 } }
]).map(item => item.reservedId)

2. 预校验待删除数据

执行删除前务必先确认待删除的记录符合预期,避免误删:

// 查询所有需要删除的重复记录,确认数量和内容是否正确
db.你的集合名.find({
  _id: { $nin: keepIdList }
})

3. 执行删除操作

确认无误后执行删除:

db.你的集合名.deleteMany({
  _id: { $nin: keepIdList }
})

大数据量场景更安全的可选方案

如果你的数据量很大,怕直接删除出问题,可以先把去重后的结果写入新集合,校验无误后再替换原集合:

// 去重后的数据写入新集合
db.你的集合名.aggregate([
  {
    $group: {
      _id: {
        empId: "$empId",
        enrollDate: "$enrollDate"
      },
      doc: { $first: "$$ROOT" }
    }
  },
  { $replaceRoot: { newRoot: "$doc" } },
  { $out: "去重后的新集合名" }
])

// 确认新集合数据正确后,删除原集合,重命名新集合为原集合名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:48:03