Mongodb刪除重復數據
阿新 • • 發佈:2018-12-17
agg aggregate move .sh foreach use acc 數組 group
假如有以下的數據表。
db.user
{
account:String //賬號
}
刪除有重復account的記錄。
首先,查找一下是否有重復的數據,也就是user表是否有重復的account.
按account進行分組,計算每個分組的記錄數,記錄數大於1的,就說明存在重復。
db.user.aggregate(
[{
$group: {_id:"$account",count:{$sum:1}}
},
{
$match: {count:{$gt:1}}
}])
如果查詢有結果,那麽說明存在重復記錄。
那下一步做刪除處理。
db.user.aggregate([{
$group: {
_id:"$account",
count:{$sum:1},
ids:{$addToSet: "$_id"}}, //把符合的記錄的id放到一個數組裏
},
{
$match: {count:{$gt:1}}
}
],
{ allowDiskUse: true } //該行是為了$group裏的sort超出內存限制
).forEach((doc)=>{ //得到重復的結果,循環記錄進行刪除
doc.ids.shift();//保留一行記錄,如果需要全部刪除重復的,去掉該行
db.user.remove({_id:{$in:doc.ids}})//根據重復id刪除指定的記錄
})
Mongodb刪除重復數據