1

使用 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 之前将其扔到 SO 上。

4

1 回答 1

1

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

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

于 2013-01-16T01:19:08.730 回答