Potrzebujesz "Interfejs API operacji zbiorczych" z MongoDB. W większości wprowadzone w MongoDB 2.6, więc jest to ważny powód do aktualizacji, jeśli obecnie tego nie zrobiłeś.
bulk = db.coll.initialize_ordered_bulk_op()
counter = 0
for record in coll.find(snapshot=True):
# now process in bulk
# calc value first
bulk.find({ '_id': record['_id'] }).update({ '$set': { 'field': newValue } })
counter += 1
if counter % 1000 == 0:
bulk.execute()
bulk = db.coll.initialize_ordered_bulk_op()
if counter % 1000 != 0:
bulk.execute()
Dużo lepiej, ponieważ nie wysyłasz „każdego” żądania do serwera, tylko raz na 1000 żądań. „Bulk API” trochę to załatwia, ale naprawdę chcesz „zarządzać” tym trochę lepiej i nie zużywać zbyt dużo pamięci w swojej aplikacji.
Droga przyszłości. Użyj go.