mongodb去除重複的資料

塗有薄技發表於2016-06-28
裡邊的內容在某些情況下不可行,可以參考下一篇。

今天出現了一個新的需求,有個部門需要拿到mongodb中的資料,要求去掉其中一個欄位內容相同的資料。

雖然mongodb中有distinct來去重,但是和mysql的distinct不同的是,mysql中能用distinct * 返回整條記錄的資訊,而mongodb的distinct我卻只是返回去重的那個欄位的資料(或許mongodb也可以返回整條,但是我不知道)。

mysql中的distinct返回完整記錄:


mongodb中distinct去重某個欄位:


上邊的內容並不是我想看到的結果,因此便想了一個辦法,去掉重複的資料後重新儲存不重複的資料到某張表中,以下是個例子:
1、進入mongo shell:
./mongo

2、切換到需要去重的集合所在的資料庫:
use admin

3、在mongo shell中編寫並執行js程式碼:
var res=db.test.find();
while(res.hasNext()){
      var res1=db.test.find(); 
      var re=res.next();
      while(res1.hasNext()){
              var re1=res1.next();
              if(re.age==re1.age){ 
                   db.test.remove({"age":re1.age}); 
               }
       } 
       db.test.insert(re); 
}



如上圖,第一次執行迴圈的時候由於res沒有定義而失敗,第二次定義了res後,執行成功。那麼在新的集合中,就完全沒有該欄位重複的資料了(這裡只是測試以下,因此就用了同一個集合)。

相關文章