删除集合中具有重复字段的文档(重复数据删除)
请注意,allowDiskUse:true 选项是可选的,但有助于缓解内存不足问题,因为如果你的集合大小很大,此聚合可能是内存密集型操作 - 所以我建议你始终使用它。
var duplicates = [];
db.transactions.aggregate([
{ $group: {
_id: { cr_dr: "$cr_dr"},
dups: { "$addToSet": "$_id" },
count: { "$sum": 1 }
}
},
{ $match: {
count: { "$gt": 1 }
}}
],allowDiskUse: true}
)
.result
.forEach(function(doc) {
doc.dups.shift();
doc.dups.forEach( function(dupId){
duplicates.push(dupId);
}
)
})
// printjson(duplicates);
// Remove all duplicates in one go
db.transactions.remove({_id:{$in:duplicates}})