recherche

Maison  >  Questions et réponses  >  le corps du texte

mongodb去重

现在的数据是使用爬虫抓取的。现在有些数据是重复的。
然后现在我想请教应该怎么做才能去重呢?
我想的是只要能查到相对应的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" : "杭州和谐置业有限公司"
}
高洛峰高洛峰2792 Il y a quelques jours608

répondre à tous(2)je répondrai

  • 怪我咯

    怪我咯2017-05-02 09:20:56

    Il semble que vous souhaitiez réaliser quelque chose de similaire au SGBDR

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

    Je ne sais pas si je comprends bien. Si tel est le cas, l’approche correspondante devrait consister à utiliser le cadre d’agrégation.

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

    Cette requête peut obtenir des résultats plus rapides avec les index suivants :

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

    Mais même ainsi, cette requête parcourra tous les enregistrements et la vitesse ne sera pas trop rapide.
    En fait, il est inutile de compter tous les enregistrements à chaque fois. Il est préférable de mettre en cache les résultats après les avoir obtenus. La manière de mettre en cache dépend de la manière dont vous souhaitez utiliser les données collectées.
    Une meilleure façon est de porter un jugement avant d'insérer. Si le même community_name existe déjà, enregistrez-le, comme

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

    De cette façon, vous pouvez directement obtenir un ensemble community_name_stat pour savoir combien de fois chaque community_name apparaît. Bien entendu, l’approche finale dépend de vos besoins. MongoDB est une chose très flexible, ce qui est l'une des caractéristiques importantes qui la distingue des bases de données relationnelles. Comprendre ses différentes fonctions et personnaliser la solution la plus rentable adaptée à vos besoins est l'un des plus grands défis liés à l'utilisation de MongoDB.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-05-02 09:20:56

    Si vous avez bien compris, vous pouvez utiliser upsert directement : si le système dispose déjà d'un enregistrement avec les mêmes conditions, mettez-le uniquement à jour, sinon créez un nouvel enregistrement.

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

    Et vous pouvez également modifier plusieurs enregistrements, si multi est défini sur true.

    répondre
    0
  • Annulerrépondre