繁体   English   中英

猫鼬是否命令Model.insertMany将任何内容写入数据库(如果失败)?

[英]Does mongoose ordered Model.insertMany write anything to the db if it fails?

在Model.insertMany的文档中,它说,当options.ordered == true时,该方法将在第一次错误时失败。

https://mongoosejs.com/docs/api.html#model_Model.insertMany

[options.ordered«Boolean»= true]如果为true,则会在遇到第一个错误时快速失败。 如果为false,将插入所有可能的文档并稍后报告错误。 具有order = false的insertMany()称为“无序” insertMany()。

可以:

  • 有错误,并且不向数据库写入任何文档。 (我想要什么)

要么

  • 写出发生在错误之前的文档,出现错误,然后不再写文档了吗?

options.ordered = true(默认值):

在将insertMany发送到MongoDB之前,Mongoose始终会验证每个文档。 因此,如果一个文档存在验证错误,除非将ordered选项设置为false ,否则不会保存任何文档。

请注意,这是验证,而不是它如何在插入过程中处理异常。

如果所有文档均通过验证,则来自MongoDb docs

排除Write Concern错误后,有序操作将在error之后停止 ,而无序操作将继续处理队列所有剩余的写操作。

请注意insertMany示例下的最后一段:

请注意, 已插入一个文档:_id:13的第一个文档将成功插入,但第二个插入将失败。 这也将阻止插入队列中剩余的其他文档

如果命令设置为false,则插入操作将继续处理所有剩余文档。

您似乎暗示您需要一种事务性方法 对于那些你应该看看这个 ,看看你的MongoDB的版本支持。

options.ordered = false:

由于您已明确指定您不关心插入顺序,因此它将继续插入并仅跳过那些例外情况。

同样来自MongoDB docs

如果将ordered设置为false,文档将以无序格式插入,mongod可能会对其进行重新排序以提高性能。 如果使用无序insertMany(),则应用程序不应依赖于插入的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM