"Bulk OperationsAPI" が必要です MongoDBから。主にMongoDB2.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リクエストごとに1回だけ送信する方がはるかに優れています。 「BulkAPI」は実際にはこれをいくらか整理しますが、実際にはこれをもう少しうまく「管理」し、アプリであまり多くのメモリを消費しないようにします。
未来への道。使用してください。