我看了很久,没有找到答案。 Node.JS MongoDB 驱动程序文档说您可以使用 insert(docs) 进行批量插入,这很好并且运行良好。
我现在有一个包含超过 4,000,000 个项目的集合,我需要向所有项目添加一个新字段。通常 mongodb 每 100 毫秒只能写入 1 个事务,这意味着我需要等待几天才能更新所有这些项目。我怎样才能进行“批量保存/更新”来一次更新它们? update() 和 save() 似乎只适用于单个对象。
伪代码:
var stuffToSave = [];
db.collection('blah').find({}, function(err, stuff) {
stuff.toArray().forEach(function(item)) {
item.newField = someComplexCalculationInvolvingALookup();
stuffToSave.push(item);
}
}
db.saveButNotSuperSlow(stuffToSave);
当然,我需要对一次执行 10,000 次这样的操作设置一些限制,以免尝试一次执行所有 400 万次,但我认为您明白了。
最佳答案
MongoDB 允许您使用单个 db.collection.update(query, update, options)
调用来更新与特定查询匹配的许多文档,请参阅 documentation 。例如,
db.blah.update(
{ },
{
$set: { newField: someComplexValue }
},
{
multi: true
}
)
multi
选项允许命令更新与查询条件匹配的所有文档。请注意,使用 Node.JS 驱动程序时也适用完全相同的情况,请参阅 that documentation .
如果您要对集合执行许多不同的更新,则可以将它们全部包装在 Bulk()
构建器中,以避免向数据库发送多个更新的一些开销。
关于node.js - 如何在 MongoDB 中批量保存对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24474849/