U wilt de "Bulk Operations API" van MongoDB. Meestal geïntroduceerd met MongoDB 2.6, dus een dwingende reden om te upgraden als je dat nog niet hebt gedaan.
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()
Veel beter omdat u niet "elk" verzoek naar de server stuurt, maar slechts één keer per 1000 verzoeken. De "Bulk API" regelt dit eigenlijk een beetje voor je, maar eigenlijk wil je dit een beetje beter "managen" en niet te veel geheugen in je app verbruiken.
Weg van de toekomst. Gebruik het.