mongoDB刪除重復(fù)的數(shù)據(jù) 去重

最近在工作上遇到需要清理雞湯文中重復(fù)的數(shù)據(jù),網(wǎng)上搜了一下俺祠,有不少方案公给,有用程序去重的,有用唯一索引來控制的蜘渣,感覺都不是很方便淌铐,后來發(fā)現(xiàn)用下面這個(gè)非常方便;

db.Passages.aggregate([
    {
        $group:{_id:{content:'$content',endTime:'$endTime',startTime:'$startTime'},count:{$sum:1},dups:{$addToSet:'$_id'}}
    },
    {
        $match:{count:{$gt:1}}
    }

    ]).forEach(function(it){

         it.dups.shift();
            db.Passages.remove({_id: {$in: it.dups}});

    });

下面來解析:

  1. 使用aggregate聚合查詢重復(fù)數(shù)據(jù)
  • $group中是查詢條件蔫缸,根據(jù)content腿准、endTime、startTime字段來聚合相同的數(shù)據(jù)拾碌;
  • $count用來統(tǒng)計(jì)重復(fù)出現(xiàn)的次數(shù)吐葱, $match來過濾沒有重復(fù)的數(shù)據(jù);
  • $addToSet將聚合的數(shù)據(jù)id放入到dups數(shù)組中方便后面使用校翔;
  1. 查詢結(jié)果使用forEach進(jìn)行迭代id來刪除數(shù)據(jù)
  • shift()作用是剔除隊(duì)列中第一條id弟跑,避免刪掉所有的數(shù)據(jù);

PS:注意函數(shù)的大小寫防症,mongoDB是嚴(yán)格區(qū)分大小寫的C霞!蔫敲!


今天發(fā)版本執(zhí)行腳本的時(shí)候發(fā)現(xiàn)在mongo2.4x的版本下面執(zhí)行報(bào)錯(cuò):

MongoDB shell version: 2.4.9
connecting to: 192.168.xxx.xxx:27017/xxx
Tue Apr  3 18:41:26.268 TypeError: Object [object Object] has no method 'forEach' at xxx.js:11
failed to load: xxx.js

先開始以為是2.4x版本如果沒有查到重復(fù)數(shù)據(jù)造成forEach報(bào)錯(cuò)饲嗽,加上try、catch手動(dòng)捕獲異常避免腳本執(zhí)行失敗奈嘿,后來檢查數(shù)據(jù)發(fā)現(xiàn)有重復(fù)數(shù)據(jù)的也依然進(jìn)異常了貌虾,這下就懵逼了,難道2.4x版本aggregat返回的數(shù)據(jù)跟3.x版本的還不一樣裙犹?

var list = db.Passages.aggregate([
    {
        $group:{_id:{content:'$content',endTime:'$endTime',startTime:'$startTime'},count:{$sum:1},dups:{$addToSet:'$_id'}}
    },
    {
        $match:{count:{$gt:1}}
    }

    ]);
print([JSON.stringify(list));

最后把查出的數(shù)據(jù)打印出來尽狠,發(fā)現(xiàn)返回的都是一個(gè)json對象不是數(shù)組榴鼎,2.4x版本的數(shù)據(jù)是放在reslut字段下的,而3.x是放在·_batch·字段下(至于為什么可以直接forEach有待研究)晚唇,當(dāng)時(shí)心中一萬只xxx奔騰而過,抱怨歸抱怨bug還是要改的盗似,當(dāng)然就只能先判斷一下版本羅哩陕。
經(jīng)過反復(fù)修改測試,下面是最終修改結(jié)果赫舒。

var list = db.Passages.aggregate([
    {
        $group:{_id:{content:'$content',endTime:'$endTime',startTime:'$startTime'},count:{$sum:1},dups:{$addToSet:'$_id'}}
    },
    {
        $match:{count:{$gt:1}}
    }

    ]);
if(list._batch!=undefined){
        print('v3.4....')
        list.forEach(function(it){

        it.dups.shift();
        db.Passages.remove({_id: {$in: it.dups}});

    });
}else{
        print('v.2.4....')
        list.result.forEach(function(it){

        it.dups.shift();
        db.Passages.remove({_id: {$in: it.dups}});

    });

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悍及,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子接癌,更是在濱河造成了極大的恐慌心赶,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缺猛,死亡現(xiàn)場離奇詭異缨叫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荔燎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門耻姥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人有咨,你說我怎么就攤上這事琐簇。” “怎么了座享?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵婉商,是天一觀的道長。 經(jīng)常有香客問我渣叛,道長丈秩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任淳衙,我火速辦了婚禮癣籽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滤祖。我一直安慰自己筷狼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布匠童。 她就那樣靜靜地躺著埂材,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汤求。 梳的紋絲不亂的頭發(fā)上俏险,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天严拒,我揣著相機(jī)與錄音,去河邊找鬼竖独。 笑死裤唠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的莹痢。 我是一名探鬼主播种蘸,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼竞膳!你這毒婦竟也來了航瞭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤坦辟,失蹤者是張志新(化名)和其女友劉穎刊侯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锉走,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滨彻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挪蹭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疮绷。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嚣潜,靈堂內(nèi)的尸體忽然破棺而出冬骚,到底是詐尸還是另有隱情,我是刑警寧澤懂算,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布只冻,位于F島的核電站,受9級特大地震影響计技,放射性物質(zhì)發(fā)生泄漏喜德。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一垮媒、第九天 我趴在偏房一處隱蔽的房頂上張望舍悯。 院中可真熱鬧,春花似錦睡雇、人聲如沸萌衬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秕豫。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間混移,已是汗流浹背祠墅。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留歌径,地道東北人毁嗦。 一個(gè)月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像回铛,于是被迫代替她去往敵國和親狗准。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容