Mongoose v3.6+ 现在支持批量插入吗?我已经搜索了几分钟,但与此查询匹配的任何内容都是几年前的,答案是明确的不。
编辑:
为了将来引用,答案是使用 Model.create()
。 create()
接受一个数组作为其第一个参数,因此您可以将要插入的文档作为数组传递。
最佳答案
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 docscallback(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/