从 mongodb 到 javascript 中的辅助副本集读取

Read from secondary replica set in mongodb through javascript

我有 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');

我错过了什么?

因为您正在尝试从数据库级别的辅助读取。您应该在副本集的连接 URL 中指定 readPreferences "secondaryPreferred"。

你可以参考这个文档,它详细描述了如何做到这一点。

Read Preferences with MongoDB Node.JS Driver

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");
  }
});
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(); }); });