sql >> Database >  >> NoSQL >> MongoDB

pymongo:duplicaten verwijderen (kaart verkleinen?)

Een alternatieve benadering is het gebruik van het aggregation framework die betere prestaties heeft dan kaartverkleining. Beschouw de volgende aggregatiepijplijn die als de eerste fase van de aggregatiepijplijn, de $group operator groepeert documenten op ID veld en slaat op in de unique_ids veld elke _id waarde van de gegroepeerde records met behulp van de $addToSet exploitant. De $sum accumulator-operator telt de waarden op van de velden die eraan zijn doorgegeven, in dit geval de constante 1 - en telt daarmee het aantal gegroepeerde records in het telveld. De andere pijplijnstap $match filtert documenten met een telling van minimaal 2, d.w.z. duplicaten.

Zodra u het resultaat van de aggregatie krijgt, herhaalt u de cursor om de eerste _id te verwijderen in de unique_ids veld, duw dan de rest in een array die later zal worden gebruikt om de duplicaten te verwijderen (min één invoer):

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. Redis-replicatie gebruiken op verschillende machines (multimaster)

  2. mangoest recursief bevolken

  3. Hoe te groeperen op meerdere velden in MongoDB wanneer één een datumveld is

  4. Hoe krijg je dezelfde rang voor dezelfde scores in de ZRANK van Redis?