MongDB中刪除重復數據

MongDB中刪除重復數據

目的:數據庫中存儲幾萬甚至幾十萬條數據,而mongdb數據庫中存在完全重復的多條數據,要刪除整個記錄,而不是某個字段。若采用python腳本,則速度慢。故采用數據庫操作命令aggregrate速度很快。


1、查詢存在重復的數據:

db.xywy_same_39_copy.aggregate([

? ? {

? ? ? ? $group: { _id: {disease_name: '$disease_name'},count: {$sum: 1},dups: {$addToSet: '$_id'}}

? ? },

? ?{

? ? ? ? $match: {count: {$gt: 1}}

? ? }

])

結果如圖所示:

(其中:count:表示該記錄出現的次數,dups:返回重復記錄對應的id)


2、刪除重復記錄

在查詢的基礎上添加forEach語句

如下代碼(在查詢基礎上,添加的代碼已加粗):

db.xywy_same_39_copy.aggregate([

? ? {

? ? ? ? $group: { _id: {disease_name: '$disease_name'},count: {$sum: 1},dups: {$addToSet: '$_id'}}

? ? },

? ? {

? ? ? ? $match: {count: {$gt: 1}}

? ? }

]).forEach(function(doc){

? ? doc.dups.shift();

? ? db.xywy_same_39_copy.remove({_id: {$in: doc.dups}});

})

說明:

1、xywy_same_39_copy代表對應操作的collection

2、根據userName和age分組并統計數量,$group只會返回參與分組的字段,使用$addToSet在返回結果數組中增加_id字段

3、使用$match匹配數量大于1的數據

4、doc.dups.shift();表示從數組第一個值開始刪除;作用是踢除重復數據其中一個_id,讓后面的刪除語句不會刪除所有數據

5、使用forEach循環根據_id刪除數據

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。