1000000 を超えるドキュメントを含む mongoDB コレクションがあり、各ドキュメントを専用の情報で 1 つずつ更新したいと考えています (各ドキュメントには他のコレクションからの情報があります)。
現在、コレクションからすべてのデータを取得するカーソルを使用しており、Node.js の非同期モジュールを介して各レコードの更新を行っています。
すべてのドキュメントを取得:
inst.db.collection(association.collection, function(err, collection) {
collection.find({}, {}, function(err, cursor) {
cursor.toArray(function(err, items){
......
);
});
});
各ドキュメントを更新します:
items.forEach(function(item) {
// *** do some stuff with item, add field etc.
tasks.push(function(nextTask) {
inst.db.collection(association.collection, function(err, collection) {
if (err) callback(err, null);
collection.save(item, nextTask);
});
});
});
「保存」タスクを並行して呼び出す
async.parallel(tasks, function(err, results) {
callback(err, results);
});
この種の操作をより効率的な方法で行うにはどうすればよいでしょうか? カーソルをロードするための最初の「検索」を回避する方法を意味します。すべてのドキュメントを更新する必要があることを知って、ドキュメントごとに操作を行う方法はありますか?
ご協力ありがとうございました。