2

我有 2 个 mongo 实例在 2 个不同的服务器(一个主服务器和另一个辅助服务器)上运行;我可以使用此连接代码从主服务器检索文档:

var db = mongojs('user:pswd@localhost:27017/mydb?authSource=admin');

但是当我尝试从辅助服务器检索文档时,我收到以下错误:

{ [MongoError: not master and slaveOk=false]
name: 'MongoError',
message: 'not master and slaveOk=false',
ok: 0,
errmsg: 'not master and slaveOk=false',
code: 13435 }

我也尝试使用代码:

var db = mongojs('user:pswd@localhost:27017/mydb?authSource=admin&slaveOk=true');

我错过了什么?

4

2 回答 2

6

由于您正在尝试在数据库级别从 Secondary 读取。您应该在副本集的连接 URL 中指定 readPreferences “secondaryPreferred”。

您可以参考此文档,其中详细描述了如何执行此操作。

使用 MongoDB Node.JS 驱动程序读取首选项

var MongoClient = require('mongodb').MongoClient
  , format = require('util').format;

var url = format("mongodb://%s,%s,%s/%s?replicaSet=%s&readPreference=%s"
  , "localhost:27017",
  , "localhost:27018"
  , "localhost:27019"
  , "exampleDb"
  , "foo"
  , "secondaryPreferred");

MongoClient.connect(url, function(err db) {
  if(!err) {
    console.log("We are connected");
  }
});
于 2016-09-29T12:04:11.393 回答
0
MongoClient.connect(
  'mongodb://ip/mongo-primary:27017,ip/mongo-secondary-1:ip/mongo-secondary-2:27017,ip/mongo-secondary-3:27017?readPreference=secondaryPreferred',
  {useNewUrlParser: true, useUnifiedTopology: true }, function (err, client) { var db = client.db('viajydb'); 

db.collection('customers').findOne({}, function (findErr, result) { if (findErr) throw findErr; console.log(result.name); client.close(); }); });
于 2020-07-22T18:46:19.650 回答