如何通过nodejs驱动程序在MongoDB上设置slaveOk?

时间:2017-06-30 05:30:32

标签: node.js mongodb

我有一个mongo副本,包括一个主要的两个副词。有些帐户只能访问辅助服务器。当我连接到辅助通过nodejs驱动程序之一时,我找不到启用slaveOk的方法。以下是我的代码。我必须将其作为普通服务器而不是副本连接到它。

options = options || {
        connectTimeoutMS: 30000,
        socketTimeoutMS: 30000,
        // retry to connect for 30 times
        reconnectTries: 30,
        // wait 1 second before retrying
        reconnectInterval: 1000,
        readPreference: mongodb.ReadPreference.SECONDARY_PREFERRED
      };
mongoClient.connect("mongodb://user:pwd@10.0.0.1/test", options, (err, db) => {
    db.command({listCollections: 1})
       .catch((e) => {
         // get exception here about "not master and slaveOk=false" 
       })
}

当我运行上面的代码时,我会得到not master and slaveOk=false的异常。我知道我需要在运行slaveOk之前在连接上启用db.command({listCollections: 1}),但我找不到相应的方法。 我知道有一个readPreference选项,但我尝试了下面的值,但没有一个工作:

ReadPreference.PRIMARY, 
ReadPreference.PRIMARY_PREFERRED, 
ReadPreference.SECONDARY, 
ReadPreference.SECONDARY_PREFERRED, 
ReadPreference.NEAREST

在Mongo Shell中,我可以运行rs.slaveOk()命令来启用对辅助服务器上的连接的读取。有没有办法在nodejs驱动程序上启用slaveOk?所以我可以通过dirver运行listCollection命令。

1 个答案:

答案 0 :(得分:0)

对我有用的是将已读偏好设置参数?readPreference=secondaryPreferred放入connect网址中。

Read from secondary replica set in mongodb through javascript有一个更完整的示例。