mongodb - 删除 MongoDB 中的重复项

标签 mongodb mongodb-query duplicates

我有一个名为“contact_id”字段的集合。 在我的收藏中,我有带有此 key 的重复寄存器。

如何删除重复项,从而只剩下一个寄存器?

我已经尝试过:

db.PersonDuplicate.ensureIndex({"contact_id": 1}, {unique: true, dropDups: true}) 

但是没有用,因为 MongoDB 3.x 中不再提供 dropDups 函数

我使用的是3.2

最佳答案

是的,dropDups 已经永远消失了。但你绝对可以通过一点点努力实现你的目标。

您需要首先找到所有重复的行,然后删除除第一个之外的所有重复行。

db.dups.aggregate([{$group:{_id:"$contact_id", dups:{$push:"$_id"}, count: {$sum: 1}}},
{$match:{count: {$gt: 1}}}
]).forEach(function(doc){
  doc.dups.shift();
  db.dups.remove({_id : {$in: doc.dups}});
});

如您所见,doc.dups.shift() 将从数组中删除第一个 _id,然后删除 dups 数组中剩余 _id 的所有文档。

上面的脚本将删除所有重复的文档。

关于mongodb - 删除 MongoDB 中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35707496/

相关文章:

java - 如何使用 Java 查询和过滤多个嵌套数组

javascript - MongoDB $cmp(聚合)给出错误结果

ios - *完全复制 UIView*

mongodb - 将现有的 MongoDB 字符串属性转换为 BSON::ObjectId

mongodb - 如何在使用 Mongoose 进行大量多次插入后执行回调?

MongoDB 获取当前日期的文档

node.js - $group by 之后的动态键

javascript - 使用 Javascript 计算数组中的重复值并返回带有附加值的计数

php - MYSQL PHP 根据重复列合并多行

mongodb - Elasticsearch MongoDB Cassandra用于可扩展架构