各个配置值的含义如下:
primary:只主(默认模式)。...只从primary节点读数据。
primaryPreferred:先主后从。优先从primary读取,primary不可用时从secondary读。
secondary:只从。...命令【不是】原子的,upsert 分为两步:
找数据
覆盖数据或插入数据
在使用该功能时,需考虑fifter条件是否作唯一, 在并发下,多个线程或协程同时 upsert 并完成找数据这一步操作,此时这些线程都没有找到数据...事务的sessionContext不能用于查询,事务的读只能在主库处理,否则会报错误【 read preference in a transaction must be primary】, 如果事务中没有读取操作...,则不存在该问题
处理方案
为了在读取操作也使用事务功能, 需要在开启事务时指定主库操作,后面就可以在读取时,使用事务的sessionContext,如下
opts := &options.TransactionOptions