Vous voulez l'"Bulk Operations API" de MongoDB. Principalement introduit avec MongoDB 2.6, donc une raison impérieuse de mettre à niveau si ce n'est pas le cas actuellement.
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()
Bien mieux car vous n'envoyez pas "toutes" les requêtes au serveur, juste une fois sur 1000 requêtes. L'"API de transfert en masse" règle cela un peu pour vous, mais vous voulez vraiment "gérer" cela un peu mieux et ne pas consommer trop de mémoire dans votre application.
Voie du futur. Utilisez-le.