You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mongo-go-driver迭代游标遇BSON解码错误,如何重试获取文档?

迭代Mongo游标时处理随机BSON解码错误(基于mongo-go-driver v1.15.0)

更新: 现已确认该问题由网络问题导致,即存在故障的负载均衡器会随机传输不完整的BSON字符串,目前已通过修复负载均衡器解决问题。

在使用mongo-go-driver v1.15.0迭代Mongo集合时,执行cursor.Decode操作会随机出现BSON解码错误,例如error decoding key accoun: EOF。注意该键的实际名称为account_id,推测是网络问题导致BSON数据未完整传输。

由于无法控制当前环境的网络,但拥有应用程序的控制权,为确保应用每次都能成功运行,唯一可行的方案似乎是在遇到此类错误时进行重试,直至底层问题解决。

更新:无法选择重启整个迭代流程,因为底层网络问题在下次尝试时仍会出现。

核心代码如下:

cursor, err := db.Collection(`c`).Find(context.TODO(), bson.D{})
Check(err)
defer cursor.Close(context.TODO())
for cursor.Next(context.TODO()) {
    var doc bson.M
    err := cursor.Decode(&doc)

    Check(err) // 此处有时会因解码错误失败

    // 处理结果逻辑
}

mongo-go-driver中的游标会批量获取文档,因此如果cursor.Decode()失败,单纯重试解码并无帮助,因为当前批次的文档已不完整。

需要重新获取并替换出现问题的文档,请问在mongo-go-driver中是否有实现此功能的方法,以缓解迭代Mongo游标时的随机网络问题?

期望的实现逻辑大致如下:

err := cursor.Decode(&doc)
if (err) {
    cursor.RetryDocument()
    continue
}

内容的提问来源于stack exchange,提问作者sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:10:16