如何在 mlab 中解决此事务错误? [MongoError: Transaction numbers are ... 支持文档级锁定]
Posted
技术标签:
【中文标题】如何在 mlab 中解决此事务错误? [MongoError: Transaction numbers are ... 支持文档级锁定]【英文标题】:how to solve this transaction error in mlab? [MongoError: Transaction numbers are ... support document-level locking] 【发布时间】:2019-09-16 14:32:35 【问题描述】:我正在尝试使用mongoose
进行简单的交易。它在MongoDB Atlas
上运行得很好,但在mlab
中我遇到了这样的错误:MongoError: Transaction numbers are only allowed on storage engines that support document-level locking
。我做了一些研究,但并没有真正找到有关mlab
和document-level locking
的任何资源。
有谁知道如何解决这个问题?
【问题讨论】:
错误消息表明您的 mLab 部署正在使用不支持文档级锁定或事务的较旧(现已弃用)的 MMAPv1 存储引擎。服务器端多文档事务需要使用 WiredTiger 存储引擎的 MongoDB 4.0+ 副本集部署。升级您的 mLab 部署以满足事务要求将解决该错误。 你解决了吗?谢谢 感谢 Stennie 的回答,我能够弄清楚这一点。我正在使用带有 MongoID 的 Ruby/Rails,我遇到了同样的问题(事务号只允许在支持文档级锁定的存储引擎上使用 (20)),奇怪的是它只发生在生产环境(Heroku)和不在开发环境中,我的 mongoDB 数据库在 mlab(3.6.12(MMAPv1))上,我移至 Atlas,问题消失了 + 我现在正在运行 Mongo 4+。 是的 Carlos,就像 Juan Ricardo 我搬到了 mongodb cloud (atlas) 并解决了。 @JuanRicardo 我使用 Ruby/Rails 遇到了同样的问题,我使用 mongo 2.8.0 驱动程序解决了这个问题。我在 mongo 2.9.0 中使用了 mongoid 6.1.1。看看这个issue 【参考方案1】:我有同样的问题,然后我联系 mlab 帮助,这是他们的回复:
该错误表明您的应用/驱动程序正在尝试使用与您的共享集群部署不兼容的功能,该部署采用 MMAPv1 存储节点。您可能启用了可重试写入 (https://docs.mongodb.com/manual/core/retryable-writes/)。您可以尝试在连接字符串 (https://docs.mongodb.com/manual/reference/connection-string/#urioption.retryWrites) 中关闭该功能,还是直接从您的驱动程序设置中关闭?
如果您在关闭此功能后仍然遇到此错误,请告诉我们。
基于这个答案,我在 mongodb 连接 url 中附加了 retryWrites=false ,然后效果很好。
【讨论】:
【参考方案2】:mlab.com
运行 mongodb 3.6,而最新的是 4.2.x 和工具、db 连接器等,想使用 4.x 功能。
简而言之,mlab.com 已经过时了。
【讨论】:
【参考方案3】:添加 retryWrites=false 对我有用;
当前网址
mongodb://<user>:<password>@ds0145508.mlab.com:11508/testdb
新网址
mongodb://<user>:<password>@ds0145508.mlab.com:11508/testdb?retryWrites=false
【讨论】:
以上是关于如何在 mlab 中解决此事务错误? [MongoError: Transaction numbers are ... 支持文档级锁定]的主要内容,如果未能解决你的问题,请参考以下文章