猫鼬:Model.create 和 Collection.insert 有什么区别



我想在MongoDB中做一个批量插入作业,我在猫鼬中找到了两种方法:

一种方法是使用insert

dataArr = [
   {
       id: "",
       name: ""
   }
   {
       id: "",
       name: ""
   }
]

Collection.insert(dataArr)

另一种方法是Model.create

Model.create(dataArr)

两者都可以完成批量插入作业,但它们之间有什么区别?

哪一个效率更高?

在 Mongoose 中,有 Model.createCollection.insert(后者严格来说不是 Mongoose 的一部分,而是底层 MongoDB 驱动程序的一部分)。

根据 Mongoose 开发人员的说法,当使用一系列文档调用时,它们基本相同,尽管查看代码让我认为存在细微的差异(警告:我没有很好地查看代码,所以我可能会误解以下内容):

  • 使用 Model.create 将调用在架构上声明的任何验证器/钩子;
  • Model.create对数组中的每个文档执行.save,从而产生N数据库调用(其中N是数组中的文档数); Collection.insert执行一个大型数据库调用;

根据我所读到的内容,Collection.insert是mongoDB驱动程序的一个函数,当插入大量数据(如数百万)时,它会更快,代价是它绕过了猫鼬验证。

小心处理

它们大致意思相同。您可以使用其中任何一个。

检查文档是否有insertMany,显然create更快,因为它只向服务器发送一个操作,而不是每个文档一个操作。

insert许多文档,需要注意的一点是insertMany不会触发保存中间件,而另一方面,create会触发。

最新更新