go操作mongo,批量插入(insert many)唯一索引冲突问题

在使用Go的mongo-driver/mongo包进行批量插入(InsertMany)时,遇到唯一索引冲突问题,尤其是在分页插入大量数据(如2000条)时。为了解决这个问题,可以设置InsertMany的ordered参数为false,确保单次插入中即使有冲突,其他数据也能正常插入。通过判断错误类型,过滤掉唯一键冲突的错误,保证其他元素的插入。以下是一个代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一下自己在使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值