Mongoose:Model.create和Collection.insert之间有什么区别

hh5*_*188 18 insert mongoose mongodb node.js

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

一种方法是使用insert:

dataArr = [
   {
       id: "",
       name: ""
   }
   {
       id: "",
       name: ""
   }
]
Run Code Online (Sandbox Code Playgroud)

Collection.insert(dataArr)

另一种方式是Model.create:

Model.create(dataArr)
Run Code Online (Sandbox Code Playgroud)

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

哪一个效率更高?

rob*_*lep 29

在Mongoose中,有Model.createCollection.insert(后者不是Mongoose的严格组成部分,而是基础的MongoDB驱动程序).

根据Mongoose开发人员的说法,当使用一系列文档调用它们时它们基本相同,虽然查看代码会让我觉得存在细微的差异(警告:我没有仔细查看代码,所以我可能会弄错关于以下内容):

  • using Model.create将调用模式中声明的任何验证器/钩子;
  • Model.create.save对数组中的每个文档执行a操作,从而导致N数据库调用(N数组中的文档数量); Collection.insert执行一次大型数据库调用;

  • 从Mongoose v3.8.12开始,``Model.collection.insert``运行**比``Model.create``快**.如果进行批量插入,您应该考虑它.请参见http://stackoverflow.com/a/24848148/778272. (2认同)
  • 还有一个值得注意的重要区别.验证时,`Model.create`也会将字符串ObjectId转换为实际的ObjectId,如果模式将其指定为字段的类型,而`Model.collection.insert`则不会将字符串作为普通字符串插入. (2认同)