奇怪的mongodb和mongoose错误:不是master和slaveOk = false错误

时间:2015-05-06 22:31:45

标签: mongodb mongoose mongohq

我在node.js应用中遇到了一个奇怪的错误

main

我正在使用mongoose 4.0.2点击mongodb 3.0.1进行findOne查询。该查询今天早些时候正在运行。

这是什么错误?我按照他们的标准每gb计划在mongohq上运行。

5 个答案:

答案 0 :(得分:32)

这意味着您尝试从副本集中的辅助节点进行读取,默认情况下只能从主节点读取。

您可以通过在连接到该辅助节点的mongo shell中运行ArrayList来允许辅助节点接受读取。不建议允许从辅助节点读取,因为如果节点尚未与主节点同步,则可能正在读取陈旧数据。

答案 1 :(得分:13)

我通过简单地修复我的Node.js用于连接到Mongoose的MongoDB的URI来解决这个问题。

当出现此错误时,我的URI是

mongodb://user:password@host:port/datatabase

这给了我错误 not master and slaveOK = false

然后我更改了URI以添加副本集信息,并且URI变为如下所示:

mongodb://user:password@host:port,replicaSetHost:replicaSetPort/database?replicaSet=rs-someServer

现在,我不知道这是否是一般模式,因为这个配置是MongoLab使用的配置,也就是托管我的DataBase的地方。但是,您可能也会通过在URI中添加副本集信息来解决问题。

答案 2 :(得分:3)

您的主节点可能会失败并且您正在尝试从从属节点读取,但默认情况下(以及数据同步等安全措施)您的读取源仅设置为主节点。

您可以在连接字符串的末尾附加选项,例如 ?readPreference=secondary将使用辅助连接

答案 3 :(得分:2)

这适用于mongoose 4.x和mongodb 3.0.x:

model.find().read('secondary').....

请参阅http://mongoosejs.com/docs/api.html#query_Query-read

答案 4 :(得分:2)

我解决了问题(通过连接到IBM上的mongoDB实例而发生)

mongoose.connect('mongodb://host1:port1/?replicaSet=rsName');

发件人:https://mongoosejs.com/docs/connections.html#replicaset_connections

相关问题