sql >> Databáze >  >> NoSQL >> MongoDB

pymongo:odstranit duplikáty (zmenšit mapu?)

Alternativním přístupem je použití aggregation framework který má lepší výkon než map-reduce. Zvažte následující agregační kanál, který jako první fázi agregačního kanálu, $group operátor seskupuje dokumenty podle ID pole a uloží se do unique_ids každé pole _id hodnotu seskupených záznamů pomocí $addToSet operátor. $sum operátor akumulátoru sečte hodnoty polí, které mu byly předány, v tomto případě konstantu 1 - čímž započítá počet seskupených záznamů do pole počet. Druhý krok kanálu $match filtruje dokumenty s počtem alespoň 2, tedy duplikáty.

Jakmile získáte výsledek z agregace, iterujete kurzorem, abyste odstranili první _id v unique_ids pole, poté vložte zbytek do pole, které bude později použito k odstranění duplikátů (mínus jeden záznam):

cursor = db.coll.aggregate(
    [
        {"$group": {"_id": "$ID", "unique_ids": {"$addToSet": "$_id"}, "count": {"$sum": 1}}},
        {"$match": {"count": { "$gte": 2 }}}
    ]
)

response = []
for doc in cursor:
    del doc["unique_ids"][0]
    for id in doc["unique_ids"]:
        response.append(id)

coll.remove({"_id": {"$in": response}})


  1. Existuje způsob, jak použít objekty dotazů MongoDB k filtrování běžných polí JavaScriptu?

  2. MapReduce Shuffling a řazení v Hadoop

  3. Jak znovu použít připojení redis v socket.io?

  4. Jak převedete hexadecimální řetězec na číslo v mongodb?