通过javascript从mongodb中设置的辅助副本中读取

Pra*_*san 2 mongodb node.js mongojs mongodb-replica-set

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

var db = mongojs('user:pswd@localhost:27017/mydb?authSource=admin');
Run Code Online (Sandbox Code Playgroud)

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

{[MongoError:不是master和slaveOk = false]
名称:“ MongoError”,
消息:“ not master and slaveOk = false”,
确定:0,
errmsg:“ not master and slaveOk = false”,
代码:13435}

我也尝试使用代码:

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

我想念什么?

小智 6

由于您正在尝试从数据库级别读取辅助数据库。您应该在副本集的连接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");
  }
});
Run Code Online (Sandbox Code Playgroud)