mongoDb刪除重複資料

2021-08-30 10:53:51 字數 1922 閱讀 6180

注:mongodb當前版本是3.4.3

查詢存在重複的資料:

查詢並迴圈刪除重複資料:

刪除語句解析:

db.userinfo.aggregate([

$group: ,count: ,dups: }

$match: }

]).foreach(function(doc)});

1.根據username和age分組並統計數量,$group只會返回參與分組的字段,使用$addtoset在返回結果陣列中增加_id欄位

2.使用$match匹配數量大於1的資料

3.doc.dups.shift();表示從陣列第乙個值開始刪除;作用是踢除重複資料其中乙個_id,讓後面的刪除語句不會刪除所有資料

4.使用foreach迴圈根據_id刪除資料

$addtoset 操作符只有在值沒有存在於陣列中時才會向陣列中新增乙個值。如果值已經存在於陣列中,$addtoset返回,不會修改陣列。

注意:foreach和$addtoset的駝峰寫法不能全部寫成小寫,因為mongodb嚴格區分大小寫、mongodb嚴格區分大小寫、mongodb嚴格區分大小寫,重要的事情說三遍!

聚合框架它是資料聚合的乙個新框架,其概念類似於資料處理的管道。 每個文件通過乙個由多個節點組成的管道,每個節點有自己特殊的功能(分組、過濾等),文件經過管道處理後,最後輸出相應的結果。

管道基本的功能有兩個:

一是對文件進行「過濾」,也就是篩選出符合條件的文件;

二是對文件進行「變換」,也就是改變文件的輸出形式。

errmsg:exceeded memory limit for $group,but didn't allow external sort.pass allowdiskuse:true

錯誤詳細資訊:

我這次用的表的資料量是:大約有四百萬資料

我要查的是:使用者接受資訊最多的前五個使用者

完分析語句,嚴格按照語法寫的;

既然出現問題,我們來一下debug(咱們碼農有力量)

如果管道沒有給出預期結果,就需要進行除錯,除錯時,可以先只指定第乙個管道操作符,如果這樣得到了預期結果,那就再指定第二個管道操作符,以上面的例子說,先試著$project 操作符進行聚合,如果這個操作符結果是有效的,就在新增 $group 操作符,

如果結果還是有效的,就再新增 $sort,最後再新增 $limit 操作符,這樣就可以逐步定位到造成問題的操作符了。

逐步除錯發現沒問題 不是語法的錯誤

麻蛋,原因是聚合的結果必須要限制在16m以內操作,(mongodb支援的最大影響資訊的大小),否則必須放在磁碟中做快取(allowdiskuse=true)。

最後把要統計的資料給搞出來了,喜大普奔。。。。

zs-----------------------------------------

db.redis_key.aggregate([

,count: ,dups: }},}

}],).foreach(function(doc)});

})

mongoDb刪除重複資料

注 mongodb當前版本是3.4.3 插入六條資料 查詢存在重複的資料 查詢並迴圈刪除重複資料 刪除語句解析 db.userinfo.aggregate group count dups match foreach function doc 1.根據username和age分組並統計數量,grou...

MongoDB刪除字段重複資料

1.查詢表中相同字段 查詢表中字段為 bqyid 相同的字段 db.restominprice.aggregate uniqueids count 2.刪除表中相同資料 查詢和刪除語句,刪除語句後面新增foreach迴圈 db.restominprice.aggregate uniqueids co...

刪除重複資料

介紹兩種刪除重複行的方式 1.使用臨時表,分組找出重複部分的id進行刪除 刪除table goods info 中存在重複goods id的記錄 select identity int,1,1 as autoid,into temptable from goods info select min a...