从 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(); }); });
我有 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(); }); });