當我們在測試階段時難免會出現一些程序寫錯,導致數據重復,本人因為這個問題,倒騰了幾天,剛開始的思路是寫腳本,因為自己語言學的太菜,導致連一個定義的公式都沒想出來,后來是利用MongoDB里面的聚合解決的。
下面我以一個小實例來講把:
不難看出,姓名有出現重復的現象,少的情況我們可以逐個刪除,當數據量達到幾百萬,幾千萬的時候估計大家有些發愁了,應該會有些朋友會想到寫腳本去篩選然后刪除這些重復的數據把,其實可以利用MongoDB中的聚合去刪除重復的數據
第一個括號是:相同數據的字段
第二個括號是:操作相對應的文檔
然后我依次向大家解釋是什么意思:
aggregate:(聚合管道)
1.group只會返回參與分組的字段
2.根據name分組統計數量
3.$match匹配數量大於1的數據
4.doc.dups.shift();表示從數組第一個值開始刪除;作用是踢除重復數據其中一個_id,讓后面的刪除語句不會刪除所有數據
5.使用forEach循環根據_id刪除數據
$addToSet 操作符只有在值沒有存在於數組中時才會向數組中添加一個值。如果值已經存在於數組中,$addToSet返回,不會修改數組。
數據重復name字段已經刪除。