我有一个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
命令。
答案 0 :(得分:0)
对我有用的是将已读偏好设置参数?readPreference=secondaryPreferred
放入connect
网址中。
Read from secondary replica set in mongodb through javascript有一个更完整的示例。