Mongo使用事务报错
问题
当我们在使用事务的时候会出现 This MongoDB deployment does not support retryable writes. Please add retryWrites=false to your connection string.提示,在网上搜索大多数的结果是根据提示在连接的参数加上retryWrites=false,而我也是这么做的,然而并没有软用。
This MongoDB deployment does not support retryable writes. Please add retryWrites=false to your connection string.
原因
后来发现单节点mongo是不支持事务的,所以需要配置mongo副本集。配置副本集我好像没有传上来如果需要,我再传吧,或者去参考他人的文章。
解决方法
- 1、如果你的mongo不是单节点,配置上提示的参数即可。
- 2、如果是单节点,就配置副本集。
配置完副本集的mongo如何连接
MongoDB副本集只有Primary节点具有写数据的能力,当副本集中Primary节点宕机,或者副本集本身轮转升级时,副本集会触发选举,选出一个新的primary,原Primary节点则会降级成secondary。
当客户端连接副本集时,如果以primary地址连接实例,当发生上述情况时,,客户端将无法继续执行写操作。为了解决这一问题,连接时,最好使用副本集方式连接。
?replicaSet=rs0为副本集的名称
def client(self, db):
# motor
self.motor_uri = 'mongodb://{account}{hostport0},{hostport1},{hostport2}/{database}?replicaSet=rs0'.format(
account='{username}:{password}@'.format(
username=self.MONGODB['MONGO_USERNAME'],
password=self.MONGODB['MONGO_PASSWORD'])
if self.MONGODB['MONGO_USERNAME'] else '',
hostport0=self.MONGODB['MONGOHOST_PORT'][0] if self.MONGODB['MONGOHOST_PORT'] else 'localhost:27017',
hostport1=self.MONGODB['MONGOHOST_PORT'][1] if self.MONGODB['MONGOHOST_PORT'] else 'localhost:27016',
hostport2=self.MONGODB['MONGOHOST_PORT'][2] if self.MONGODB['MONGOHOST_PORT'] else 'localhost:27015',
# host=self.MONGODB['MONGO_HOST'] if self.MONGODB['MONGO_HOST'] else 'localhost',
# port=self.MONGODB['MONGO_PORT'] if self.MONGODB['MONGO_PORT'] else 27017,
database=db)
print(self.motor_uri)
return AsyncIOMotorClient(self.motor_uri, retryWrites=False, io_loop=self.loop, tz_aware=True,
tzinfo=pytz.timezone('Asia/Shanghai'))