MongoDb PHP驱动程序 - 使用readPreference进行聚合查询?

时间:2013-01-11 02:00:56

标签: php mongodb master-slave aggregation-framework

使用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中的错误之前我会把它扔掉。

1 个答案:

答案 0 :(得分:1)

通过PHP驱动程序的所有命令查询当前都定向到主服务器。我们有几个与此相关的旧票证,这些票据源于将计数命令指向辅助节点的请求,但这是一个非常重要的更改,需要检查命令对白名单以确保它是只读的。跟踪此修复程序的当前故障单为PHP-535,我将其与您打开的问题PHP-662相关联。

如果您需要立即解决,可以直接在find()集合上调用$cmd,并传递您通常传递给{{3的$command数组参数} {作为find()的参数。 Kristina在MongoDB::command()中记录了这个解决方案,尽管她在该示例中使用了slaveOkay(),但它也应该与读取首选项一起使用。