如何在nodejs中使用mongodb直接从mongo slave读取

时间:2016-01-13 22:08:57

标签: node.js mongodb

我正在尝试从从属节点读取但是我收到以下错误。

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(),我就可以进行查询。

1 个答案:

答案 0 :(得分:3)

您只需使用以下代码

即可
var collection1 = db.collection(currentCollection,{readPreference:'secondaryPreferred'});

有关详情,请查看Scaling Read Query Load