mongodb刪除重復數據


注: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM