我有一个名为“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/