MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

pymongo:премахване на дубликати (намаляване на карта?)

Алтернативен подход е да използвате aggregation framework който има по-добра производителност от map-reduce. Разгледайте следния тръбопровод за агрегиране, който като първи етап от тръбопровода за агрегиране, $group оператор групира документи по ID поле и съхранява в unique_ids поле всеки _id стойност на групираните записи с помощта на $addToSet оператор. $sum операторът на акумулатора сумира стойностите на предадените му полета, в този случай константата 1 - като по този начин брои броя на групираните записи в полето за броене. Другата стъпка на конвейера $match филтрира документи с брой поне 2, т.е. дубликати.

След като получите резултата от агрегирането, итерирате курсора, за да премахнете първия _id в unique_ids поле, след което натиснете останалите в масив, който ще се използва по-късно за премахване на дубликатите (минус един запис):

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. Обобщение с брой поддокументи, съответстващи на условието и групиране

  2. Запитване на Mongoose за филтриране на масив и попълване на свързано съдържание

  3. Актуализиране на обект на масив въз основа на идентификатора?

  4. Неуспешна операция за деактивиране за модел MongoMapper, не може да се изтрие/премахне ключ от модела

  5. MongoDB $atan