最近自己有一份MongoDB的數據需要去重,但是發下直接運行以前的去重命令發現報錯,通過查看報錯信息發現報錯原因爲超出了MongoDB的內存的限制,通過查閱資料整理,終於解決了問題,下面奉上代碼供大家參考。
查詢數據中是否有重複的數據:
.aggregate([
{ $group: { _id : '$店鋪id', count: { $sum : 1 } } },
{ $match: { count: { $gt : 1} } }
])
上訴代碼段 $店鋪id 對應的是需要查詢的字段名。
百萬級數據去重操作
db.getCollection('店鋪鏈接_test').aggregate([
{
$group: { _id: {店鋪id: '$店鋪id'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
},
{
$match: {count: {$gt: 1}}
}
],{allowDiskUse: true}).forEach( //(使用forEach循環根據_id刪除數據)
function(doc){
doc.dups.shift();
db.getCollection('店鋪鏈接_test').remove(
{
_id: {
$in: doc.dups
}
}
);
}
)
其中的重點是 {allowDiskUse: true} 這句話,通過查閱知曉語句的作用是 即允許使用磁盤緩存!