在Model.insertMany的文档中,它说,当options.ordered == true时,该方法将在第一次错误时失败。
https://mongoosejs.com/docs/api.html#model_Model.insertMany
[options.ordered«Boolean»= true]如果为true,将在 遇到第一个错误。如果为false,将所有文件插入 可以并稍后报告错误。具有order = false的insertMany()是 称为“无序” insertMany()。
这样做:
或
答案 0 :(得分:2)
options.ordered = true(默认值):
猫鼬总是在将 insertMany 发送到 MongoDB。因此,如果一个文档存在验证错误,则不会有任何文档 保存,除非您将 ordered选项设置为false 。
请注意,这是验证方式,而不是它在插入过程中如何处理异常的方式。
如果所有文档均通过验证,则来自MongoDb docs:
排除“写入问题”错误,有序操作 错误,而无序操作继续处理 在队列中写入操作。
请注意insertMany
示例下的最后一段:
请注意,已插入一个文档 :_id的第一个文档:13 将成功插入,但第二次插入将失败。 这将 还可以阻止插入队列中剩余的其他文档。
如果命令设置为false,则插入操作将继续执行 剩余文件。
您似乎暗示您需要transactional approach。为此,您应该查看into this并查看您的MongoDB版本是否支持它。
options.ordered = false:
由于您明确指定您不关心插入顺序,因此它将继续插入并仅跳过有例外的情况。
也来自MongoDB docs:
如果将ordered设置为false,则文档将以无序方式插入 格式,mongod可以重新排序以提高性能。 如果使用 无序insertMany()。