我正在尝试从从属节点读取但是我收到以下错误。
MongoError: not master
at Function.MongoError.create (node_modules/mongodb-core/lib/error.js:31:11)
at node_modules/mongodb-core/lib/topologies/server.js:777:66
at Callbacks.emit (node_modules/mongodb-core/lib/topologies/server.js:95:3)
at null.messageHandler (node_modules/mongodb-core/lib/topologies/server.js:249:23)
at Socket.<anonymous> (node_modules/mongodb-core/lib/connection/connection.js:265:22)
at emitOne (events.js:78:13)
at Socket.emit (events.js:170:7)
at readableAddChunk (_stream_readable.js:147:16)
at Socket.Readable.push (_stream_readable.js:111:10)
at TCP.onread (net.js:524:20)
这是我的代码
var MongoClient = require('mongodb').MongoClient
MongoClient.connect('mongodb://slave.example.com/?slaveOk=true', {slaveOk: true}, (err, db) => {
if (err) { throw err }
d = db.db('order', {server: {slaveOk: true}})
d.eval('rs.slaveOk(); 1', (err, data) => {
if (err) { throw err }
console.log(data);
})
})
我在连接字符串中提供完整的主机列表,因为运行此查询的节点只能访问辅助MongoDB节点。
使用命令行界面时,只要在执行查询之前运行rs.slaveOk()
,我就可以进行查询。
答案 0 :(得分:3)
您只需使用以下代码
即可var collection1 = db.collection(currentCollection,{readPreference:'secondaryPreferred'});
有关详情,请查看Scaling Read Query Load