node.js - Mongoose (mongodb)批量插入?

标签 node.js mongodb mongoose

Mongoose v3.6+ 现在支持批量插入吗?我已经搜索了几分钟,但与此查询匹配的任何内容都是几年前的,答案是明确的不。

编辑:

为了将来引用,答案是使用 Model.create()create() 接受一个数组作为其第一个参数,因此您可以将要插入的文档作为数组传递。

Model.create() documentation

最佳答案

Model.create() 与 Model.collection.insert():更快的方法

Model.create() 如果您正在处理非常大的批量,那么插入是一种不好的方法。它会非常慢。在这种情况下,您应该使用 Model.collection.insert,它的性能要好得多。根据 block 的大小,Model.create() 甚至会崩溃!尝试了一百万个文件,没有运气。使用 Model.collection.insert 只需几秒钟。

Model.collection.insert(docs, options, callback)
  • docs 是要插入的文档数组;
  • options 是一个可选的配置对象 - 见 the docs
  • callback(err, docs) 将在所有文档保存或发生错误后调用。成功时,docs 是持久化文档的数组。

正如 Mongoose 的作者指出的 here ,此方法将绕过任何验证程序并直接访问 Mongo 驱动程序。这是您必须做出的权衡,因为您要处理大量数据,否则您根本无法将其插入数据库(请记住,我们在这里讨论的是数十万个文档)。

一个简单的例子

var Potato = mongoose.model('Potato', PotatoSchema);

var potatoBag = [/* a humongous amount of potato objects */];

Potato.collection.insert(potatoBag, onInsert);

function onInsert(err, docs) {
    if (err) {
        // TODO: handle error
    } else {
        console.info('%d potatoes were successfully stored.', docs.length);
    }
}

2019-06-22 更新:虽然 insert() 仍然可以正常使用,但它已被弃用,取而代之的是 insertMany() .参数完全相同,因此您可以将其用作直接替换,并且一切都应该正常工作(嗯,返回值有点不同,但您可能无论如何都不会使用它)。

引用

关于node.js - Mongoose (mongodb)批量插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16726330/

相关文章:

node.js - 为mongodb网站expressjs存储图像的最佳方法是哪一种?

mongodb - 如何实现 $bucket 按多个字段分组

javascript - 如何在 angular.js 中处理多个异步任务?

javascript - NodeJS中通过URL发送的参数数量

json - 如何将我通过 npm 安装的所有依赖项保存到我的 package.json 文件中?

javascript - 当部分修改时 Gulp 重建父 js 文件

javascript - FetchError : request to http://localhost:3000/api/projects failed, 原因 : connect ECONNREFUSED 127. 0.0.1 :3000 (Express/Next. Js)

node.js - 使用 Windows 10 使用 nodemon 进行 Docker 热重载 Node 应用程序

node.js - 'req.body.username' 和 'req.body.password' 未定义

node.js - 使用 Mongoose 保存身份验证凭据时出现问题