mongodb去重
高洛峰
高洛峰 2017-05-02 09:18:56
0
2
521

現在的資料是使用爬蟲抓取的。現在有些數據是重複的。
然後現在我想請教應該怎麼做才能去重呢?
我想的是只要能查到相對應的name也是ok的
打個比方。我現在有個community_name欄位。
我想查詢一下,community_name重複次數超過1次的name列表
我該怎麼去查詢。
謝謝。
文檔格式:

{ "_id" : ObjectId("5732e6f884e079abfa783703"), "buildings_num" : "4", "community_name" : "江和城", "address" : "新安江洋安新城,南临洋安大道、北临滨江路", "lat" : "29.511485", "building_year" : "2014年建成", "lng" : " 119.329673", "house_num" : 224, "id" : 84453, "category" : "建德商圈", "city" : "杭州", "lj_id" : "187467387072819", "area" : "建德", "average_price" : 8408, "property_cost" : "2 元/平米/月", "property_company" : "金管家", "volume_rate" : "1.98", "greening_rate" : 0.33, "developers" : "杭州和谐置业有限公司" }
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆 (2)
刘奇

看你的意思是想達到RDBMS中類似

SELECT community_name, COUNT(*) FROM table GROUP BY community_name HAVING COUNT(*) > 1

不知道我理解對了沒有。如果是這樣的話,對應的方式應該是使用aggregation framework。

db.coll.aggregate([ {$group: {_id: "$community_name", count: {$sum: 1}}}, //统计community_name重复出现的次数 {$match: {count: {$gt: 1}}} //从中找出重复多于1次的记录 ]);

這個查詢在有以下索引的情況下可以更快得到結果:

db.coll.createIndex({community_name: 1});

但是即使這樣,這個查詢也會遍歷所有記錄,速度並不會太快。
實際上每次都去統計所有記錄是比較浪費的,最好在得到結果後做一定的緩存,如何緩存要取決於你統計出來的數據想要怎麼用。
更好的辦法是插入前就做判斷,如果已經存在同樣的community_name則是記錄在案,例如

db.community_name_stat.update({ community_name: 'xxx' }, { '$set': { count: {'$inc': 1} }, '$setOnInsert': { community_name: 'xxx', count: 1 } }, { upsert: true });

這樣就可以直接得到一個community_name_stat集合得到每個community_name_stat集合得到每个community_name出現過幾次。當然最終的做法還是取決於你的需求。 MongoDB是一個很靈活的東西,這也是它有別於關係型資料庫的重要特點之一。了解它的各種功能,為你的需求客製化一個性價比最高的解決方案,是使用MongoDB流程中最大的挑戰之一。

    phpcn_u1582

    如果理解正確的話,你可以直接用upsert:如果系統已經有了相同條件的紀錄,只update,否則建立新的紀錄。

    db.collection.update(query, update, {upsert: True, multi: })

    而且你還可以修改多條紀錄,如果設定multi為true。

      最新下載
      更多>
      網站特效
      網站源碼
      網站素材
      前端模板
      關於我們 免責聲明 Sitemap
      PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!