如何通过命令行在replicaset中的辅助mongodb服务器中设置rs.slaveOk()?

如何通过命令行在replicaset中的辅助mongodb服务器中设置rs.slaveOk()?,mongodb,replicaset,Mongodb,Replicaset,如何通过命令行在replicaset中的辅助mongodb服务器中设置rs.slaveOk() 我尝试了以下方法: ${MONGO_HOME}/bin/MONGO--port${MONGO_PORT2}--host${MONGO_SECONDARY2}--eval“printjson(rs.slaveOk())” ${MONGO_HOME}/bin/MONGO--port${MONGO_PORT2}--host${MONGO_SECONDARY2}--eval“printjson(rs.slav

如何通过命令行在replicaset中的辅助mongodb服务器中设置rs.slaveOk()

我尝试了以下方法:

${MONGO_HOME}/bin/MONGO--port${MONGO_PORT2}--host${MONGO_SECONDARY2}--eval“printjson(rs.slaveOk())”

${MONGO_HOME}/bin/MONGO--port${MONGO_PORT2}--host${MONGO_SECONDARY2}--eval“printjson(rs.slaveOk(true))”

${MONGO_HOME}/bin/MONGO--port${MONGO_PORT2}--host${MONGO_SECONDARY2}--eval“printjson(db.getSiblingDB('admin').getMongo().setslavook())”

该命令在输出日志中以
undefined
执行。
我正试图通过主服务器中的shell来设置它。

调用下面的方法应该可以正常工作,因为该方法没有返回类型,所以不会将任何内容打印回屏幕

${MONGO_HOME}/bin/mongo --port ${MONGO_PORT2} --host ${MONGO_SECONDARY2} --eval "rs.slaveOk()"
在mongo.exe中运行
rs.slaveOk
,还将了解它的实现方式,因为它只是一个辅助方法:

> rs.slaveOk
function (value) { return db.getMongo().setSlaveOk(value); }
>
以及
setLaveOK
方法:

> db.getMongo().setSlaveOk
function ( value ) {
     if( value == undefined ) value = true;
     this.slaveOk = value;
}
您可以始终尝试查询辅助服务器上的一个集合,以确保该节点是可查询的:

> db.test.findOne()
null 
更新-更清晰一点

设置
slaveOk()
仅对执行它的控制台会话有效,因此您需要传入脚本或使用exmaple的
--shell
参数保持与控制台的连接

C:\mongodb\bin>mongo.exe --port 27012 --eval "rs.slaveOk()" --shell
MongoDB shell version: 3.0.5
connecting to: 127.0.0.1:27012/test
type "help" for help
rs1:SECONDARY> db.test.find()
{ "_id" : ObjectId("5630fdf2af4abd9f8ae7f79c"), "test" : true }
rs1:SECONDARY>
如果我们没有传入
rs.slaveOk()
文件,我们将得到以下响应:

C:\mongodb\bin>mongo.exe --port 27012 --shell
MongoDB shell version: 3.0.5
connecting to: 127.0.0.1:27012/test
type "help" for help
rs1:SECONDARY> db.test.find()
Error: error: { "$err" : "not master and slaveOk=false", "code" : 13435 }
rs1:SECONDARY> exit
bye

创建一个文件
/etc/mongorc.js
,并在那里添加
rs.slaveOk()
。每次启动shell时都会对该文件进行评估

有关更多信息,请查看

从MongoDB 4.4版开始,您可能会看到如下警告:

警告:slaveOk()已弃用,可能会在下一个主要版本中删除。请改用secondaryOk()。

因此,请选择使用
rs.secondaryOk()
JFYI: 看起来
rs.slaveOk()
很快就会被弃用,而MongoDB建议使用
rs.secondaryOk()

以下是你将在MongoShell看到的官方警告:

警告:slaveOk()已弃用,可能会在下一个主要版本中删除 释放。请改用secondaryOk()


Cheers

rs.slaveOk()没有返回类型。你想实现什么?返回值部分有误导性。当我试图通过shell脚本执行上面提到的命令时,它不起作用。你一直说事情不起作用,但没有提供关于你试图做什么的信息,也没有错误消息?!我试图通过unix命令行在辅助服务器中执行rs.slaveOk()。没有错误,代码已执行,但辅助服务器仍无法接受读取。SetLaveOK()不会更改副本是否接受读取。它允许连接用于查询,即使该连接是到从属服务器的,该设置对服务器没有影响。这不起作用,这是我尝试的第一种方法。谢谢。@NitheshKHP我已经更新了答案,只是为了让主题更清晰一点,希望它现在更有意义。我更喜欢这种
db.getMongo().setslavook()
方法,因为它更容易编写脚本。在政治正确的时代,MongoDB中是否还存在任何名为“slave”的东西?