Você deseja a "API de operações em massa" do MongoDB. Principalmente introduzido com o MongoDB 2.6, portanto, uma razão convincente para atualizar se você ainda não o fez.
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()
Muito melhor, pois você não está enviando "todas" solicitações para o servidor, apenas uma vez a cada 1000 solicitações. A "API em massa" realmente resolve isso para você, mas na verdade você quer "gerenciar" isso um pouco melhor e não consumir muita memória em seu aplicativo.
Caminho do futuro. Use-o.