AWS DocumentDB执行含UpdateOne的bulk_write报错不支持可重试写入怎么办
AWS DocumentDB下bulk_write报重试写入不支持的解决方案
报错根因
- AWS DocumentDB 不兼容MongoDB的重试写入(Retryable Writes)特性,而3.6及以上版本的pymongo默认开启了该特性,执行
bulk_write操作时会默认触发该特性校验,因此抛出301错误。 - 你当前使用的
UpdateOne+upsert的业务逻辑没有问题,无需修改业务操作,仅需调整数据库连接配置即可。
修复方法
在初始化MongoClient时显式指定关闭重试写入,添加retryWrites=False参数即可,修改后的代码如下:
from pymongo import MongoClient from pymongo import UpdateOne data = [] # list of dicts/documents # 新增retryWrites=False参数关闭重试写入 mongo = MongoClient('some_host', retryWrites=False) db = mongo['some_db'] collection = db['some_collection'] operations = [UpdateOne({'_id': d['_id']}, {'$set': d}, upsert=True) for d in data] result = collection.bulk_write(operations)
如果你使用连接URI的方式初始化客户端,直接在URI尾部追加参数即可:
mongodb://[username]:[password]@[DocumentDB实例地址]:27017/?retryWrites=false
注意事项
关闭重试写入后,若操作过程中出现网络波动、实例临时不可用等异常,数据库驱动不会自动重试写入操作,你可以根据业务需求自行封装异常捕获和重试逻辑。
内容的提问来源于stack exchange,提问作者learningisfun
相关产品推荐
相关产品推荐

