我有一个mongoDB集合,包含超过1000000个文档,我想用专用信息逐一更新每个文档(每个文档都有一个来自其他收藏)。如何使用MongoDB/NodeJS进行大规模随机更新
我目前使用的是获取集合中的所有数据的光标,我通过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);
});
});
});
呼叫并行
“保存” 任务何你会以更有效的方式进行这种操作吗?我的意思是如何避免最初的“查找”加载游标。现在有办法通过doc了解所有文档应该更新吗?
感谢您的支持。
您是否有理由在开始处理之前获取所有文档?为什么不只是遍历一个游标而不是将它们全部读入一个数组并迭代一个数组? –
是的,我同意你的观点,但仍然需要在处理每个文档之前先加载光标。你有不同的例子吗? – Michael
不是真的 - 文档将从服务器批量获取(一次默认为100个)。你迫使一次性提取所有文件。 –