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

时间:2016-09-29 11:36:56

标签: node.js mongodb mongojs mongodb-replica-set

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

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

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

  

{[MongoError:not master and 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');

我错过了什么?

2 个答案:

答案 0 :(得分:4)

因为您尝试从DB级别读取辅助节点。您应该在副本集的连接URL中指定readPreferences“secondaryPreferred”。

您可以参考此文档,详细说明如何执行此操作。

Read Preferences with MongoDB Node.JS Driver

//this will shuffle values in the array on random positions
shuffle($participants);
//this return the last value from the array and deletes it from the array
$winner = array_pop($participants);


echo "The winner is $winner !\n";
echo "The losers are ".implode(', ',$participants)."\n";

答案 1 :(得分: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},函数(err,客户端){var db = client.db('viajydb'); db.collection('customers')。findOne({},函数(findErr,结果){如果(findErr)抛出findErr; console.log(result.name); client.close();});});