1. 程式人生 > >Mongodb刪除重復數據

Mongodb刪除重復數據

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刪除重復數據