[英]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.