node.js - 如何在 MongoDB 中批量保存对象数组?

标签 node.js mongodb

我看了很久,没有找到答案。 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/

相关文章:

javascript - 使用 Puppeteer 单击选择器

node.js - FirebaseFunctions Cors 编号 'Access-Control-Allow-Origin'

node.js - TSOA Express App 返回无法获取端点

java - Morphia List<Map<String,Object>>> 在查找操作中返回嵌入式元素不是 DBObject

node.js - 使用 Express 和 MongoDB 从多个单独的集合中获取数据

spring - 如何在 mongodb 存储库中使用 @query 添加 orderby

javascript - socket.io如何为每个新连接发出热点事件

javascript - 在NODE环境下调试Javascript时如何确保只进入我的代码?

python - 如何从mongodb检索图像文件到html页面

python - Dagster 无法本地连接到 mongodb