sql >> Database teknologi >  >> NoSQL >> MongoDB

pymongo:fjern dubletter (kortreducer?)

En alternativ tilgang er at bruge aggregationsramme som har bedre ydeevne end map-reduce. Overvej følgende aggregeringspipeline, der som det første trin i aggregeringspipelinen, $gruppe operatør grupperer dokumenter efter ID felt og gemmer i unique_ids felt hver _id værdien af ​​de grupperede poster ved hjælp af $addToSet operatør. $sum akkumulatoroperatoren summerer værdierne af de felter, der sendes til den, i dette tilfælde konstanten 1 - og tæller derved antallet af grupperede poster ind i tællefeltet. Det andet pipelinetrin $match filtrerer dokumenter med et antal på mindst 2, dvs. dubletter.

Når du får resultatet fra aggregeringen, gentager du markøren for at fjerne det første _id i unique_ids feltet, og skub derefter resten ind i et array, der senere vil blive brugt til at fjerne dubletterne (minus én indtastning):

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. C# Mongodb. Sum felt for alle dokumenter

  2. Kan samme felt bruges i $sert, $unset of update(aggregeret)

  3. Redis og Memcache eller bare Redis?

  4. Redis:Mislykket åbning af .rdb til lagring:Tilladelse nægtet