2014-06-26 35 views
1

假设我为同一个mongodb副本集获得了两台服务器 - 一个使用mongodb主节点,另一个使用辅助节点和仲裁器。我使用Node.JS来访问数据库(https://github.com/mongodb/node-mongodb-native)。在我手动断开这些服务器之间的连接之后,由于仲裁器,主节点变为次节点,次节点为主节点。现在,我希望被允许从中学读书。我的代码如下所示:副本集的主要首选首选项不起作用

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" 
    , "primaryPreferred"); 

MongoClient.connect(url, function(err db) { 
    if(!err) { 
    console.log("We are connected"); 

    var collection = db.collection('somecollection'); 
    collection.find({}).toArray(function(err, items) { 
     // Done reading from secondary if available 
    }) 
    } 
}); 

但它表示没有副本集成员可用于ReadPreference查询未定义和标记未定义。我该怎么办 ?

+0

是你能解决这个问题?除非您的部署与您复制的[示例代码](http://mongodb.github.io/node-mongodb-native/driver-articles/anintroductionto1_1and2_2.html#read-preferences)相同,否则听起来好像您可能拥有您的参数不匹配(因为ReadPreference未定义)。如果您仍然遇到问题,我会发布您的确切代码(使用主机名称编辑)。 – Stennie

回答

0

我想你需要设置slaveOk:“true”。这将启用辅助查询,然后您将能够查询。

问候, Sheraz贾韦德

+0

阅读首选项*替换旧的'slaveOk'设置,如果设置将优先(参考:[MongoClient或如何以新的更好的方式连接](http://mongodb.github.io/node-mongodb-本机/驱动器 - 文章/ mongoclient.html))。 – Stennie