百萬數量級的MongoDB去重操作

最近自己有一份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}  這句話,通過查閱知曉語句的作用是  即允許使用磁盤緩存!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章