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

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() .参数完全相同,因此您可以将其用作直接替换,并且一切都应该正常工作(嗯,返回值有点不同,但您可能无论如何都不会使用它)。

引用

  • Mongo documentation
  • Aaron Heckman on Google Groups discussing bulk inserts

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

相关文章:

node.js - 如何在 MongoDB 中按日期对集合进行排序?

javascript - Mongoose 子文档与嵌套模式

node.js - 如何使用 2d 地理索引在 Mongoose 模式中正确定义数组中的对象

node.js - 如何使用 Mongoose 生成 ObjectId?

javascript - mongoose vs mongodb(nodejs模块/扩展),哪个更好

mongodb - Mongoose -- 强制集合名称

mongodb - 使用 MongoDB 检查字段是否存在

mongodb - mongorestore 错误 : Don't know what to do

mongodb - 蒙哥 : find items that don't have a certai

node.js - MongoDB 和 Mongoose 的区别