当前位置: 首页 > 知识库问答 >
问题:

Mongodb v4。0事务,MongoError:仅允许在副本集成员或mongos上使用事务号

宦源
2023-03-14

我已经安装了MongoDB v4。0获取Nodejs中it事务的最惊人功能,mongodb作为驱动程序。

当我尝试使用事务会话时,我遇到了以下错误:

MongoError:事务号仅允许在副本集成员或mongos上使用。

那是什么,我怎么才能摆脱它?

欢迎提出任何建议。

共有3个答案

谷梁承宣
2023-03-14

我最近遇到了同样的问题。就我而言,这是因为我正在连接到具有与本地开发环境不同版本的远程Mongo服务器。

为了快速解决此问题,我在连接字符串中添加了以下参数:

? retryWrites=false

艾焕
2023-03-14
匿名用户

我得到了解决方案,它只是MongoDB配置文件中的三行配置。

从MongoDB图集切换并在带有WHM的CentOS 7 VPS上安装MongoDB v 4.4.0后,我也遇到了这个问题。

run rs解决方案对我不起作用,但我在没有任何第三方工具的情况下成功地解决了这个问题,遵循以下步骤:

最有效的方法是使用命令mongo输入MongoDB shell检查方法

db.shutdownServer()

您将无法使用MongoDB服务器。对我来说,关闭进程花了太长时间,然后我用以下命令终止了进程:

systemctl stop -f mongod

如果终止了mongod进程,则可能需要运行mongod--dbpath/var/db--repair

var/db应该指向您的数据库目录。

对于replicaSet设置步骤,请查看/etc/mongod。conf文件,查找复制值行,您应该添加以下行:

replication:
   oplogSizeMB: <int>
   replSetName: <string>
   enableMajorityReadConcern: <boolean>

在下一步中使用replSetName值。

这些设置的示例:

   oplogSizeMB: 2000
   replSetName: rs0
   enableMajorityReadConcern: false

将replSetName的值添加到连接URL中

如果您使用我们示例中的名称rs0,那么您应该在您的DB连接中添加URL查询副本集=rs0

输入命令:systemctl start monstar

使用命令mongo进入MongoDB shell,输入命令rs.initiate()现在您应该在您的副本数据库中。

翟修明
2023-03-14

事务无疑是MongoDB 4.0中最令人兴奋的新功能。但不幸的是,大多数用于安装和运行MongoDB的工具都会启动独立服务器,而不是副本集。如果您尝试在独立服务器上启动会话,您会收到此错误。

为了使用事务,您需要一个MongoDB副本集,并且在本地启动副本集进行开发是一个涉及的过程。新的run-rs npm模块使启动副本集变得容易。运行run-rs是启动副本集所需要的一切,run-rs甚至会为您安装正确版本的MongoDB。

Run rs除了节点之外没有外部依赖项。js和npm。您不需要安装Docker、homebrew、APT、Python甚至MongoDB。

使用npm的-g标志全局安装run rs。您还可以在包中列出run rs。json文件的devdependences。

npm install run-rs -g

接下来,使用--version标志运行run-rs。Run rs将下载MongoDB v4。0.0为您。别担心,它不会覆盖您现有的MongoDB安装。

run-rs -v 4.0.0 --shell

然后在连接字符串中使用replicaSet=rs。

您可以在此处找到有关它的更多详细信息。

 类似资料:
  • 问题内容: 这篇文章是JPA的延续。如何在持久化后从数据库获取值 当我执行以下命令时,我将遵循以下异常,该如何解决呢? DAOImpl 代码 applicationContext.xml 问题答案: 我猜这里的问题是,尽管您已经为事务管理器定义了bean,但是您没有注释启用弹簧事务的create()方法。 还要删除该语句,因为现在所有事务管理都将在spring之前完成,如果您保留该语句不变,则将再

  • 我目前在Spring集成中处理JMS事务时遇到困难。我正在创建的集成流程如下所示: JMS队列A- 我希望在JMS队列B和JMS队列C上保证消息的传递。然而,为了使传递稍微困难一些,我希望将导致错误的消息存储在单独的JMQ队列上,并在队列a上确认消息。 但是,如果我对此进行测试并在队列C上设置消息之前抛出错误(让我们假设队列B首先完成,队列C其次完成),事务将确认队列A并在队列B和错误队列上提交消

  • 问题内容: MySQL是否允许使用嵌套事务? 问题答案: 支持。 您可以执行以下操作:

  • 如果我有一个在类级别上标记为的基本Dao类,这将导致Dao的每个调用都在它自己的事务中运行。 如果我在某个地方创建了一个方法,它使用多个对不同道方法的调用,会怎么样?这些调用中的每一个都将在自己的事务中运行,还是事务将被包装? 如果它被包装,你会认为这是一个很好的做法,在一个通用的DAO类中有<代码> @事务性< /代码>注释,以便DAO可以直接用作<代码> @ AutoWordBaseDaO。

  • 支持项 完全支持非跨库事务,例如:仅分表,或分库但是路由的结果在单库中; 完全支持因逻辑异常导致的跨库事务。例如:同一事务中,跨两个库更新。更新完毕后,抛出空指针,则两个库的内容都能回滚。 不支持项 不支持因网络、硬件异常导致的跨库事务。例如:同一事务中,跨两个库更新,更新完毕后、未提交之前,第一个库宕机,则只有第二个库数据提交。

  • 问题内容: 我正在尝试使用pyodbc创建一个SQL Server数据库。 失败并显示此错误 多语句事务中不允许使用CREATE DATABASE语句 它失败,因为该方法启动了事务,并且无法在事务内运行。 那么还有其他方法可以使用python执行命令吗? 问题答案: 建立连接时,pyodbc的默认设置符合Python的DB- API规范。因此,当执行第一个SQL语句时,ODBC将开始有效的数据库事