strange mongodb and mongoose error: not master and slaveOk=false error

蹲街弑〆低调 提交于 2019-11-29 15:59:33

问题


I'm getting a strange error in my node.js app

not master and slaveOk=false code 13435

I'm doing a findOne query using mongoose 4.0.2 hitting a mongodb 3.0.1. The query was working earlier today.

What is this error? I'm running on mongohq on their standard per gb plan.


回答1:


That means you're trying to read from a secondary node in a replica set, you can only read from the primary node by default.

You can allow a secondary node to accept reads by running rs.slaveOk() in a mongo shell that is connected to that secondary node. Allowing reads from a secondary is not recommended, because you could be reading stale data if the node isn't yet synced with the primary node.




回答2:


I solved this by simply fixing the URI my Node.js application was using to connect to MongoDB with Mongoose.

When this error ocurred, my URI was

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

and this was giving me the error not master and slaveOK=false.

Then I changed the URI to add the Replica Set information, and the URI became something like this:

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

Now, I don't know if this is a general pattern, because this configuration is the one used by MongoLab, which is where my DataBase is hosted. However, it's likely you will solve the problem by adding the replica set information in the URI as well.




回答3:


I solved the problem(happened by connecting to a instance of mongoDB on IBM) with

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

From: https://mongoosejs.com/docs/connections.html#replicaset_connections




回答4:


It is likely your master node failed and you are trying to read from a slave node but by default (and a safety practice such as data synchronization) your reading source is set to primary node only.

You can attach options at the end of your connection string such as ?readPreference=secondary which will use the secondary connection




回答5:


This works for me on mongoose 4.x and mongodb 3.0.x:

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

see http://mongoosejs.com/docs/api.html#query_Query-read



来源:https://stackoverflow.com/questions/30088833/strange-mongodb-and-mongoose-error-not-master-and-slaveok-false-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!