刪除集合中具有重複欄位的文件(重複資料刪除)
請注意,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}})