mongodb刪除重複資料

simadi發表於2019-02-27
注:mongodb當前版本是3.4.3
 
插入六條資料:

 
查詢存在重複的資料:
 
查詢並迴圈刪除重複資料:
 
刪除語句解析:
db.userInfo.aggregate([
    {
        $group: { _id: {userName: '$userName',age: '$age'},count: {$sum: 1},dups: {$addToSet: '$_id'}}
    },
    {
        $match: {count: {$gt: 1}}
    }
]).forEach(function(doc){
    doc.dups.shift();
    db.userInfo.remove({_id: {$in: doc.dups}});
})
1.根據userName和age分組並統計數量,$group只會返回參與分組的欄位,使用$addToSet在返回結果陣列中增加_id欄位
2.使用$match匹配數量大於1的資料
3.doc.dups.shift();表示從陣列第一個值開始刪除;作用是踢除重複資料其中一個_id,讓後面的刪除語句不會刪除所有資料
4.使用forEach迴圈根據_id刪除資料
 
$addToSet 操作符只有在值沒有存在於陣列中時才會向陣列中新增一個值。如果值已經存在於陣列中,$addToSet返回,不會修改陣列。
 
注意:forEach和$addToSet的駝峰寫法不能全部寫成小寫,因為mongodb嚴格區分大小寫、mongodb嚴格區分大小寫、mongodb嚴格區分大小寫,重要的事情說三遍!
 
參考地址:http://forum.foxera.com/mongodb/topic/967/mongodb%E5%A6%82%E4%BD%95%E5%B0%86%E9%87%8D%E5%A4%8D%E7%9A%84%E6%95%B0%E6%8D%AE%E5%88%A0%E9%99%A4

相關文章