strange mongodb and mongoose error: not master and slaveOk=false error
strange mongodb and mongoose error: not master and slaveOk=false error
我的 node.js 应用出现奇怪的错误
not master and slaveOk=false code 13435
我正在使用 mongoose 4.0.2 执行 findOne 查询,遇到 mongodb 3.0.1。该查询在今天早些时候运行。
这是什么错误?我 运行 在 mongohq 上按他们的标准每 gb 计划。
这意味着您正在尝试从副本集中的辅助节点读取,默认情况下您只能从主节点读取。
您可以允许辅助节点在连接到该辅助节点的 mongo shell 中接受 运行 rs.slaveOk()
的读取。不建议允许从辅助节点读取,因为如果节点尚未与主节点同步,您可能正在读取陈旧数据。
更新: 正如 Janusz Slota 的评论所指出的,rs.slaveOk()
不再使用。使用 rs.secondaryOk()
代替,但是仍然不推荐这样做。这是 rs.secondaryOk().
的文档
这对我适用于 mongoose 4.x 和 mongodb 3.0.x:
model.find().read('secondary').....
我通过简单地修复我的 Node.js 应用程序使用 Mongoose 连接到 MongoDB 的 URI 解决了这个问题。
发生此错误时,我的 URI 是
mongodb://user:password@host:port/datatabase
,
这给了我错误 not master and slaveOK=false。
然后我修改了URI,加入了Replica Set的信息,URI变成了这样:
mongodb://user:password@host:port,replicaSetHost:replicaSetPort/database?replicaSet=rs-someServer
.
现在,我不知道这是否是一种通用模式,因为此配置是 MongoLab 使用的配置,它是托管我的数据库的地方。但是,您也可以通过在 URI 中添加副本集信息来解决问题。
很可能您的主节点出现故障,您正在尝试从从节点读取数据,但默认情况下(以及数据同步等安全措施)您的读取源仅设置为主节点。
您可以在连接字符串的末尾附加选项,例如
?readPreference=secondary
将使用辅助连接
我用
解决了这个问题(通过连接到 IBM 上的 mongoDB 实例而发生)
mongoose.connect('mongodb://host1:port1/?replicaSet=rsName');
发件人:https://mongoosejs.com/docs/connections.html#replicaset_connections
您可以使用 readPreference
连接字符串。
mongodb://localhost:27017/?readPreference=seconday&directConnection=true&ssl=false
当主要不允许您连接时,您可以使用次要偏好。
我的 node.js 应用出现奇怪的错误
not master and slaveOk=false code 13435
我正在使用 mongoose 4.0.2 执行 findOne 查询,遇到 mongodb 3.0.1。该查询在今天早些时候运行。
这是什么错误?我 运行 在 mongohq 上按他们的标准每 gb 计划。
这意味着您正在尝试从副本集中的辅助节点读取,默认情况下您只能从主节点读取。
您可以允许辅助节点在连接到该辅助节点的 mongo shell 中接受 运行 rs.slaveOk()
的读取。不建议允许从辅助节点读取,因为如果节点尚未与主节点同步,您可能正在读取陈旧数据。
更新: 正如 Janusz Slota 的评论所指出的,rs.slaveOk()
不再使用。使用 rs.secondaryOk()
代替,但是仍然不推荐这样做。这是 rs.secondaryOk().
这对我适用于 mongoose 4.x 和 mongodb 3.0.x:
model.find().read('secondary').....
我通过简单地修复我的 Node.js 应用程序使用 Mongoose 连接到 MongoDB 的 URI 解决了这个问题。
发生此错误时,我的 URI 是
mongodb://user:password@host:port/datatabase
,
这给了我错误 not master and slaveOK=false。
然后我修改了URI,加入了Replica Set的信息,URI变成了这样:
mongodb://user:password@host:port,replicaSetHost:replicaSetPort/database?replicaSet=rs-someServer
.
现在,我不知道这是否是一种通用模式,因为此配置是 MongoLab 使用的配置,它是托管我的数据库的地方。但是,您也可以通过在 URI 中添加副本集信息来解决问题。
很可能您的主节点出现故障,您正在尝试从从节点读取数据,但默认情况下(以及数据同步等安全措施)您的读取源仅设置为主节点。
您可以在连接字符串的末尾附加选项,例如
?readPreference=secondary
将使用辅助连接
我用
解决了这个问题(通过连接到 IBM 上的 mongoDB 实例而发生)mongoose.connect('mongodb://host1:port1/?replicaSet=rsName');
发件人:https://mongoosejs.com/docs/connections.html#replicaset_connections
您可以使用 readPreference
连接字符串。
mongodb://localhost:27017/?readPreference=seconday&directConnection=true&ssl=false
当主要不允许您连接时,您可以使用次要偏好。