2

2 つの異なるサーバー (1 つのプライマリと他のセカンダリ) で実行されている 2 つの mongo インスタンスがあります。次の接続コードを使用して、プライマリ サーバーからドキュメントを取得できます。

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

DBレベルでセカンダリから読み取ろうとしているため。レプリカ セットの接続 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 に答える