Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 以副本集模式连接到Mongo_Mongodb - Fatal编程技术网

Mongodb 以副本集模式连接到Mongo

Mongodb 以副本集模式连接到Mongo,mongodb,Mongodb,我有一个运行副本集的独立Mongo实例。然而,我似乎无法在Mongo shell中连接和运行任何查询。我得到以下信息: 错误:{“$err”:“非主从式OK=false”,“代码”:13435} 我这样设置SlaveOk: db.getMongo().setslavok() …但我还是有一个错误: error: { "$err" : "not master or secondary; cannot currently read from this replSet member", "code"

我有一个运行副本集的独立Mongo实例。然而,我似乎无法在Mongo shell中连接和运行任何查询。我得到以下信息:

错误:{“$err”:“非主从式OK=false”,“代码”:13435}

我这样设置SlaveOk:

db.getMongo().setslavok()

…但我还是有一个错误:

error: {
"$err" : "not master or secondary; cannot currently read from this replSet member",
"code" : 13436
}

我似乎无法在Google上找到一个直接的答案:如何使用mongo shell连接到副本集?

您连接到的节点既不是处于次要状态,也不是处于主要状态。此节点可以是仲裁器,也可能是处于恢复模式的辅助节点。例如,如果我有一个由3个节点组成的副本集(其中有一个主节点、一个辅助节点和一个仲裁节点),那么即使在我将slaveOK设置为true之后,如果我连接到仲裁节点并发出查询,我也会得到相同的错误。shell的命令行提示符应指示所连接的节点处于何种状态:

foo:ARBITER> db.test.find()
error: {
    "$err" : "not master or secondary; cannot currently read from this replSet member",
    "code" : 13436
}

您是否尝试过:db.getMongo().setslavok(true)

如果要连接到副本集中不是主节点的节点,则需要显式地告诉客户端您没有连接到主节点是正常的

你可以打电话来

斯莱沃克先生()

然后可以执行查询


请注意,当连接到从属节点时,您将只能执行查询,而不能对存储库进行更改。

我也收到了错误消息。但是,当我尝试使用机器名而不是“localhost”或127.0.0.1连接到辅助节点时,错误消失了。

我遇到了同样的问题,并使用

rs.initiate()

仅当您在独立模式下运行作为副本集一部分的实例,而未将其从副本集中完全删除时,才会显示此错误。 e、 g.在不同的端口上重新启动实例,但启动时不要删除--repSet选项。 这会启动它,但既不是作为主要的,也不是作为次要的,因此会出现错误 不是硕士或中学

根据最初打算执行的操作,可以在正确的端口上使用正确的--repSet选项重新启动实例。这会将其添加到副本集中并消除此错误


如果您打算将实例作为独立实例运行一段时间(比如创建索引),然后在不使用--repSet选项的其他端口上启动它

在具有两个副本集的临时服务器上运行aggregate()时,我遇到了相同的错误。我想您需要将读取首选项更改为“secondaryPreferred”


只需将.read('secondaryPreferred')放在查询函数之后。

您说您有“独立”Mongo并运行副本集。这些是相互冲突的标识符。它要么是独立的,要么是副本集。如果是副本集,则必须提供其配置(rs.conf())和状态(rs.status())。如果连接到副本集中的主数据库,该怎么办@o使用如果您连接到副本集中的主数据库,您将不会收到错误消息,并且您将能够读取或写入。我的问题是,它是在“恢复”中,而不是在“主数据库”中。这几乎肯定是错误的做法。或者您已经在使用副本集(在这种情况下,它什么也不做),或者您没有,但不想这样做,在这种情况下,您已经给自己带来了问题,因为后退很困难。对于空的测试数据库,它可以工作。然后使用
db.getMongo()
更新连接信息。