Vuoi la "Bulk Operations API" da MongoDB. Introdotto principalmente con MongoDB 2.6, quindi un motivo convincente per eseguire l'aggiornamento se attualmente non lo hai fatto.
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()
Molto meglio perché non stai inviando "ogni" richiesta al server, solo una volta ogni 1000 richieste. L'"API Bulk" in realtà risolve in qualche modo questo problema, ma in realtà vuoi "gestirlo" un po' meglio e non consumare troppa memoria nella tua app.
Via del futuro. Usalo.