【问题标题】:how to solve this transaction error in mlab? [MongoError: Transaction numbers are ... support document-level locking]如何在 mlab 中解决此事务错误? [MongoError: Transaction numbers are ... 支持文档级锁定]
【发布时间】:2019-09-16 14:32:35
【问题描述】:

我正在尝试使用mongoose 进行简单的交易。它在MongoDB Atlas 上运行得很好,但在mlab 中我遇到了这样的错误:MongoError: Transaction numbers are only allowed on storage engines that support document-level locking。我做了一些研究,但并没有真正找到有关mlabdocument-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

标签: node.js mongodb mongoose mlab


【解决方案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 
      

      【讨论】:

        猜你喜欢
        • 2018-12-29
        • 2014-04-29
        • 1970-01-01
        • 2013-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-17
        • 2011-02-25
        相关资源
        最近更新 更多