如何批量保存MongoDB中的对象数组?

时间:2014-06-29 09:38:43

标签: node.js mongodb

我看了很长时间但没找到答案。 Node.JS MongoDB驱动程序文档说你可以使用insert(docs)进行批量插入,这很好并且运行良好。

我现在有一个超过4,000,000个项目的集合,我需要为它们添加一个新字段。通常mongodb每100ms只能写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万件,但我认为你明白了。

1 个答案:

答案 0 :(得分:0)

MongoDB允许您使用单个db.collection.update(query, update, options)调用更新与特定查询匹配的许多文档,请参阅documentation。例如,

db.blah.update(
   { },
   {
      $set: { newField: someComplexValue }
   },
   { 
      multi: true
   }
)

multi选项允许命令更新符合查询条件的所有文档。请注意,使用Node.JS驱动程序时完全相同,请参阅that documentation

如果您正在对集合执行许多不同的更新,则可以将它们全部包装在Bulk()构建器中,以避免将多个更新发送到数据库的一些开销。 / p>