2013-01-11 54 views
1

使用PHP驅動程序1.3.2和mongodb 2.2,我試圖使用readPreference將聚合查詢引導到副本集中的其中一個輔助節點。看來我嘗試的任何事情都是在主服務器上執行聚合查詢。MongoDb PHP驅動程序 - 帶有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驅動程序的錯誤?其他人遇到這個?以爲我會把它作爲一個bug添加到他們的Jira中。

回答

1

通過PHP驅動程序進行的所有命令查詢當前都定向到主服務器。我們有幾張與此相關的老門票,這些老門票發起請求將計數命令指向輔助節點,但這是一個不平凡的變化,需要檢查命令對白名單以確保它是隻讀的。跟蹤此修復程序的當前票證是PHP-535,我與您打開的問題鏈接,PHP-662

如果您需要立即變通,你可以在$cmd收集直接調用find(),傳遞,你通常會傳遞給MongoDB::command()作爲參數find()相同$command數組參數。 Kristina在this JIRA comment中記錄了該解決方案,雖然在該示例中她使用slaveOkay(),但它也應該與讀取首選項一起使用。

+0

謝謝 - 我試圖通過jira搜索相關的項目,但是正在尋找有關'聚合'助手的問題。你的回答很有意義,因爲看起來'聚合'助手只是包裝'命令'。 – kmfk

相關問題