记录一下自己在使用go调用mongo的时候,批量插入insert many的时候遇到的唯一索引冲突问题,对go和mongo的官方驱动包不做过多阐述
问题简述:
go语言操作mongo要用到官方的工具包:"go.mongodb.org/mongo-driver/mongo"
其中有个批量插入的方法 InsertMany
批量插入会遇到一个问题(尤其是再分页批量插入的时候,我设置的批量上限是2000条):唯一健索引冲突导致后续的插入失败
需求:
希望批量插入的时候能忽略唯一索引冲突的元素,并保证其他的元素正常插入
解决办法:
思路:
1.设置批量插入的条件ordered=false:保证某一次批量插入的时候,一个失败了,这次批量插入的其他数据能正常被插入。
2.判断返回的err是不是唯一健冲突,如果是的话,忽略该err
首先进行条件插入要用到官方包:
"go.mongodb.org/mongo-driver/mongo/options"
代码demo如下:
_,e:=mgdbClient.DB().Collection(表名).InsertMany(context, 数据集,options.InsertMany().SetOrdered(false))
//判断e是不是mongo的异常
if mgErr, ok := e.(mongo.BulkWriteException); ok {
//判断该mongo异常是不是内容异常
i