我想在MongoDB中进行批量插入工作,我在mongoose中找到了两种方法:

一种方法是使用insert:

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

Collection.insert(dataArr)

另一种方式是Model.create:

Model.create(dataArr)

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

哪一个更高效?

推荐答案

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

根据Mongoose开发者的说法,当用一系列文档调用它们时,它们是basically the same,尽管查看代码让我觉得有细微的差异(warning:我没有很好地查看代码that,所以我可能对以下内容有误解):

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

Mongodb相关问答推荐

如何在MongoSH中的现有文档中插入字段

从MongoDB中的嵌套数组中提取找到的值及其索引

MongoDB - 将对象转换为数组

多键索引,性能问题

如何在MongoDB中搜索有序子集的方法?

Mongodb,在一个查询中用正则表达式更新部分字符串

MongoDB 聚合使用 $match 和 $expr 和数组

MongoDB 查询以包含多个字段的最常见值的计数

MongoDb c# driver LINQ vs Native 查询

db.createCollection 不是函数

如何在 MongoDb 中使用杰克逊将日期字段存储为 ISODate()

删除嵌套文档数组中的嵌入文档

NodeJS中的密码重置

在 Mongoose 中填写所有必填字段

如何使用 MongoDB 建模 likes投票系统

如何使用node.js http服务器从mongodb返回大量行?

使用 Node.js 将许多记录插入 Mongodb 的正确方法

如何使用服务器实例指定 mongodb 用户名和密码?

判断字段是否存在于数组的子文档中

将 FilterDefinition 转换为可以在 mongo shell 中运行的常规 json mongo 查询