如何忽略重复键错误并继续插入,同时使用 MongoDB-mgo 插入许多文档?
How can I ignore duplicate key error & proceed insertion, While insert many documents with MongoDB-mgo?
当我使用 insert(docs...) 插入多个文档时,如果文档列表中存在文档中的一个重复键,则操作失败并且无法插入文档。我怎样才能忽略这个错误,所以所有的文件但不是重复的都可以成功插入。
默认情况下,当您使用 MongoDB 的 .insertMany()
或类似的方式插入文档时,将按顺序插入 { ordered: true }
,如果在数组中插入文档时出现错误文档那么整个操作将失败,因为不插入该特定文档并在该文档之后休息其他文档。因此,要使此过程无序,您需要将选项传递给 .insertMany()
,即 { ordered: false }
.
参考: MongoDB-insertMany-Unordered-inserts
所以说到mgo驱动,你可能需要用到func (b *Bulk) Unordered()
.
参考: mgo-Unordered
注意:如果您在数据库上有多个唯一键约束,最好的选择是检查为什么会出现重复键错误以及哪个键导致此问题并进行更正文档或字段的唯一索引,而不是从插入中跳过文档。
当我使用 insert(docs...) 插入多个文档时,如果文档列表中存在文档中的一个重复键,则操作失败并且无法插入文档。我怎样才能忽略这个错误,所以所有的文件但不是重复的都可以成功插入。
默认情况下,当您使用 MongoDB 的 .insertMany()
或类似的方式插入文档时,将按顺序插入 { ordered: true }
,如果在数组中插入文档时出现错误文档那么整个操作将失败,因为不插入该特定文档并在该文档之后休息其他文档。因此,要使此过程无序,您需要将选项传递给 .insertMany()
,即 { ordered: false }
.
参考: MongoDB-insertMany-Unordered-inserts
所以说到mgo驱动,你可能需要用到func (b *Bulk) Unordered()
.
参考: mgo-Unordered
注意:如果您在数据库上有多个唯一键约束,最好的选择是检查为什么会出现重复键错误以及哪个键导致此问题并进行更正文档或字段的唯一索引,而不是从插入中跳过文档。