MongoDB主节点上的MongoDB错误不是master和slaveOk = false

时间:2018-12-20 20:24:13

标签: node.js mongodb mongoose

我正在运行复制的mongoDB,并且可以使用mongo毫无问题地连接到主数据库:

.with()

但是当使用像这样的猫鼬时:

bash-4.2$ mongo --port 25023
MongoDB shell version: 3.2.6
rs0:PRIMARY>

我得到:

mongoose.connect('mongodb://127.0.0.1:25023/XXX', { useNewUrlParser: true });

建议这样做:

XXX/node_modules/mongoose/lib/utils.js:452       
throw err;
    ^
MongoError: not master and slaveOk=false
   at queryCallback (/XXX/node_modules/mongodb-core/lib/cursor.js:247:25)

但这有点无用。没有办法告诉猫鼬我们正在连接到主服务器而不是从属服务器吗?

第二个问题...即使列出其他主机也没有用:

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

即使提供了copySet,我仍然收到此错误:

mongoose.connect('mongodb://localhost:P,S1:P,S2:P/XXX?replicaSet=rs0', { useNewUrlParser: true });

这是奇怪的地方:我可以完成这项工作。如果我使用此行:

(node:13757) UnhandledPromiseRejectionWarning: Unhandled promise rejection  (rejection id: 1): MongoError: seed list contains no mongos proxies, replicaset connections requires the parameter replicaSet to be supplied in the URI or options object, mongodb://server:port/db?replicaSet=name

让它失败,然后触摸强制NodeJS重新启动的JS文件,然后它似乎开始工作了?

1 个答案:

答案 0 :(得分:0)

相同的问题,基本上我想连接到副本集中的主节点(写关注),但是我间歇性地连接到辅助节点(竞争条件)。

解决方案/ TLDR;

在您的MONGO_URL连接字符串中添加?replicaSet=test&w=majority


From the documentation...

具有高度关注的副本集

以下内容连接到具有写关注点的副本集,该副本集配置为等待复制,以便在大多数带有数据的投票成员之间成功复制,并具有两秒钟的超时时间。

  

注意

     

对于副本集,请指定副本集配置中列出的mongod实例的主机名。

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000