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

现在的数据是使用爬虫抓取的。现在有些数据是重复的。
然后现在我想请教应该怎么做才能去重呢?
我想的是只要能查到相对应的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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

membalas semua(2)
刘奇

Nampaknya anda mahu mencapai sesuatu yang serupa dengan RDBMS

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

Saya tidak tahu sama ada saya faham dengan betul. Jika ini berlaku, pendekatan yang sepadan hendaklah menggunakan rangka kerja pengagregatan.

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

Pertanyaan ini boleh mendapatkan hasil yang lebih pantas dengan indeks berikut:

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

Tetapi walaupun begitu, pertanyaan ini akan merentasi semua rekod, dan kelajuannya tidak akan terlalu pantas.
Sebenarnya, adalah membazir untuk mengira semua rekod setiap kali Sebaik-baiknya untuk cache keputusan selepas mendapatkannya.
Cara yang lebih baik ialah membuat pertimbangan sebelum memasukkan Jika community_name yang sama sudah wujud, rekodkannya, seperti

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

Dengan cara ini, anda boleh terus mendapatkan set community_name_stat untuk mendapatkan bilangan kali setiap community_name muncul. Sudah tentu, pendekatan terakhir bergantung pada keperluan anda. MongoDB adalah perkara yang sangat fleksibel, yang merupakan salah satu ciri penting yang membezakannya daripada pangkalan data hubungan. Memahami pelbagai fungsinya dan menyesuaikan penyelesaian yang paling kos efektif untuk keperluan anda adalah salah satu cabaran terbesar dalam menggunakan MongoDB.

phpcn_u1582

Jika anda memahaminya dengan betul, anda boleh menggunakan upsert secara langsung: jika sistem sudah mempunyai rekod dengan keadaan yang sama, kemas kini sahaja, jika tidak, buat rekod baharu.

db.collection.update(pertanyaan, kemas kini, {upsert: True, multi: <boolean>})

Dan anda juga boleh mengubah suai berbilang rekod, jika berbilang ditetapkan kepada benar.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan