无法使用Node.js从MongoDB从站读取数据

我已经看到了许多同样的问题,但不知何故,我仍然无法成功地连接到MongoDB的奴隶。

我使用mongo-k8s-sidecar在Kubernetes上运行我的集群,直接将我的应用程序连接到主工作正常,但是每当我尝试连接到奴隶,我似乎无法阅读,这里的错误代码:

MongoError: not master and slaveOk=false

我为我的应用程序使用Node.js,这就是我如何连接:

 var mongodb = require('mongodb').Db; var Server = require('mongodb').Server var db = new mongodb('dbname', new Server("localhost",27017,{slaveOk: true})); db.open(function(err, conn){ if (err){ callback(err); }else { client=conn; client.createIndex("tablename", {field:1} , {background:true}, function(err, i) { logger.info(err); }); //The rest of the code is trimmed 

我在这里错过了什么?

即使正在使用slaveOk / ReadPreference.SECONDARY,也不能在辅助成员上运行createIndex()

如果您在没有createIndex()调用的情况下testing代码,您可能会发现它正在按预期工作。

有关更多详细信息,请参阅副本集上的构build索引 。 基本上,如果你想build立一个辅助索引你需要停止mongod实例,作为一个独立的(没有replSet选项),然后build立索引。

或者您只能在主服务器上创build索引,索引创build将复制到辅助服务器上。

假设你正在使用驱动程序的v1.x, slaveOk: true是数据库的一个选项,而不是服务器:

 var db = new mongodb('dbname', new Server("localhost",27017), {slaveOk: true}); 

DocRef

对于v2.x驱动程序,选项是readPreference=ReadPreference.SECONDARY

DocRef