Искате "API за групови операции" от MongoDB. Въведен предимно с MongoDB 2.6, така че убедителна причина да надстроите, ако в момента не сте го направили.
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()
Много по-добре, тъй като не изпращате "всяка" заявка към сървъра, а само веднъж на всеки 1000 заявки. „Груповият API“ всъщност подрежда това донякъде за вас, но наистина искате да „управлявате“ това малко по-добре и да не консумирате твърде много памет в приложението си.
Пътят на бъдещето. Използвайте го.