我想在MongoDB中做一个批量插入作业,我在猫鼬中找到了两种方法:
一种方法是使用insert
:
dataArr = [
{
id: "",
name: ""
}
{
id: "",
name: ""
}
]
Collection.insert(dataArr)
另一种方法是Model.create
:
Model.create(dataArr)
两者都可以完成批量插入作业,但它们之间有什么区别?
哪一个效率更高?
在 Mongoose 中,有 Model.create
和 Collection.insert
(后者严格来说不是 Mongoose 的一部分,而是底层 MongoDB 驱动程序的一部分)。
根据 Mongoose 开发人员的说法,当使用一系列文档调用时,它们基本相同,尽管查看代码让我认为存在细微的差异(警告:我没有很好地查看代码,所以我可能会误解以下内容):
- 使用
Model.create
将调用在架构上声明的任何验证器/钩子; -
Model.create
对数组中的每个文档执行.save
,从而产生N
数据库调用(其中N
是数组中的文档数);Collection.insert
执行一个大型数据库调用;
根据我所读到的内容,Collection.insert是mongoDB驱动程序的一个函数,当插入大量数据(如数百万)时,它会更快,代价是它绕过了猫鼬验证。
小心处理
它们大致意思相同。您可以使用其中任何一个。
检查文档是否有insertMany
,显然create
更快,因为它只向服务器发送一个操作,而不是每个文档一个操作。
insert许多文档,需要注意的一点是insertMany不会触发保存中间件,而另一方面,create
会触发。