This MongoDB deployment does not support retryable writes
的最佳解决方案是什么?是否有我应该使用的版本/设置(例如,找到从MMAPv1切换到WiredTiger的方法),或者显式的retryWrites=false
设置更新确实是heroku mlab部署的最佳解决方案?
背景:
在过去几周的某个时间点,我的Heroku提供的mLab进行了大约一年的运行,在任何尝试写入时,它都运行了大约一年:
Exception: This MongoDB deployment does not support retryable writes. Please add retryWrites=false to your connection string.
我没有对部署或驱动程序进行任何更改,因此我认为此新异常与mlab端的更新与我自己的设置不兼容有关。
关于诸如How to fix retryWrites in Mongo?之类的讨论,我遇到了对该问题的解决方法。该修补程序要求将retryWrites=false
选项传递给MongoClient,但在我看来,尽管我可以绕过该错误,但MongoDB部署上不受支持的功能的问题尚未得到真正解决。
已为MongoDB 4.2更新的官方驱动程序中的[可重试写入为enabled by default。
所有最新版本的MongoDB服务器(我将包括MongoDB 3.6+,因为3.4将于下个月终止),默认情况下还包括可重试的写支持。
错误消息表明您具有较旧的服务器部署或配置,不支持可重试的写入。
要解决此问题,您的选择是:
retryWrites=false
添加到驱动程序连接字符串。我建议升级您的MongoDB部署,尤其是如果您仍在使用不赞成使用的MMAPv1存储引擎或EOL服务器版本时。