MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

pymongo:usuń duplikaty (zmniejsz mapę?)

Alternatywnym podejściem jest użycie aggregation framework który ma lepszą wydajność niż map-reduce. Rozważmy następujący potok agregacji, który jako pierwszy etap potoku agregacji, $group operator grupuje dokumenty według ID i przechowuje w unique_ids każde pole _id wartość zgrupowanych rekordów przy użyciu $addToSet operator. $sum Operator akumulatora sumuje wartości przekazanych mu pól, w tym przypadku stałą 1 - w ten sposób zliczając ilość zgrupowanych rekordów do pola count. Drugi krok potoku $match filtruje dokumenty o liczbie co najmniej 2, czyli duplikaty.

Po uzyskaniu wyniku z agregacji iterujesz kursor, aby usunąć pierwszy _id w unique_ids a następnie włóż resztę do tablicy, która zostanie później użyta do usunięcia duplikatów (minus jeden wpis):

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
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:brak pamięci

  2. Problem z relacjami hasMany w Laravel 5.3 + biblioteka MongoDB 'jenssegers/laravel-mongodb'

  3. zwróć tylko jedną właściwość _id

  4. Referencje a osadzania w MongoDB

  5. Czy MongoDB może wypełnić puste dokumenty?