使用php驱动程序1.3.2和mongodb 2.2,我试图使用readPreference将聚合查询定向到我的副本集中的一个辅助节点。似乎我尝试的任何东西,聚合查询都在主服务器上执行。
基本示例:
$db = new \MongoClient('rs1.example:27017,rs2.example:27017,rs3.example:27017', array('replicaSet' => 'myRs') );
$db->setReadPreference( \MongoClient::RP_SECONDARY );
$results = $db->tracking->sessions->aggregate( array( ... ) );
我已启用MongoLog
并获得以下结果:
汇总方法显示:REPLSET INFO: - connection: type: PRIMARY
如果我改用find,则会显示:REPLSET INFO: - connection: type: SECONDARY
这是php驱动程序的错误吗?其他人遇到这个?我想在将它添加为Jira中的错误之前我会把它扔掉。
答案 0 :(得分:1)
通过PHP驱动程序的所有命令查询当前都定向到主服务器。我们有几个与此相关的旧票证,这些票据源于将计数命令指向辅助节点的请求,但这是一个非常重要的更改,需要检查命令对白名单以确保它是只读的。跟踪此修复程序的当前故障单为PHP-535,我将其与您打开的问题PHP-662相关联。
如果您需要立即解决,可以直接在find()
集合上调用$cmd
,并传递您通常传递给{{3的$command
数组参数} {作为find()
的参数。 Kristina在MongoDB::command()
中记录了这个解决方案,尽管她在该示例中使用了slaveOkay()
,但它也应该与读取首选项一起使用。