Рассмотрите возможность использования bulkWrite
API использовать обновление, как он справляется с этим гораздо лучше и эффективнее, чем делать обновление в цикле т.е. отправки каждое обновления запрос с каждой итерацией может быть медленным с большими наборами данных.
bulkWrite
API отправляет запись на сервер в партиях сказать 500, который дает лучшую производительность, как вы не посылать каждый запрос на сервер, только один раз в каждые 500 запросов.
Для массовых операций MongoDB налагает default internal limit of 1000 операций на каждую партию, и поэтому выбор из 500 документов будет хорошим в том смысле, что у вас есть некоторый контроль над размером партии, а не для MongoDB, налагающего значение по умолчанию, то есть для более крупных операций в величина> 1000 документов.
Рассмотрим следующий пример:
var bulkUpdateOps = [], // create an array to hold the update operations
counter = 0, // counter to control the batch sizes
rgx = /\.(html)$/i, // regex for querying and updating the field
cursor = db.collection.find({ "myField": rgx }); // cursor for iterating
cursor.snapshot().forEach(function(doc) {
var updatedField = doc.myField.replace(rgx, ''); // update field
bulkUpdateOps.push({ // queue the update operations to an array
"updateOne": {
"filter": {
"_id": doc._id,
"myField": { "$ne": updatedField }
},
"update": { "$set": { "myField": updatedField } }
}
});
counter++;
if (counter % 500 == 0) { // send the update ops in bulk
db.collection.bulkWrite(bulkUpdateOps);
bulkUpdateOps = []; // reset the array
}
})
if (counter % 500 != 0) { // clean up remaining operations in the queue
db.collection.bulkWrite(bulkUpdateOps)
}
Awesome, спасибо! – TW80000
Рад это услышать, и вы приветствуете :) –