2013-01-11 3 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

, 그것은 보여줍니다 REPLSET INFO: - connection: type: SECONDARY

이것은 php 드라이버의 버그입니까? 다른 사람 누구나이 문제에 빠지니? 그들의 Jira에서 버그로 추가하기 전에 나는 그것을 그렇게 던질 것이라고 생각했다.

답변

1

PHP 드라이버를 통한 모든 명령 쿼리는 현재 주 서버로 전달됩니다. 우리는이 명령과 관련된 몇 가지 예전 티켓을 보조 명령에 전달하라는 요청으로 시작했지만 읽기 전용이라는 것을 확인하기 위해 허용 목록에 대해 명령을 검사해야하는 사소한 변경 사항이었습니다. 이 픽스를 추적하는 현재 티켓은 PHP-535입니다.이 티켓은 내가 연 문제인 PHP-662에 링크되어 있습니다. 당신이 즉시 필요한 경우

일을 주위에, 당신은 당신이 일반적으로 find()의 인수로 MongoDB::command()에 전달하는 것과 동일한 $command 배열 인수를 전달, 직접 $cmd 컬렉션 find()를 호출 할 수 있습니다. Kristina는이 솔루션을 this JIRA comment에 문서화했으며 해당 예제에서 slaveOkay()을 사용했지만 읽기 기본 설정에서도 작동해야합니다.

+0

감사합니다. jira를 통해 관련 항목을 검색했지만 'aggregate'도우미와 관련된 문제를 찾고있었습니다. 'aggregate' 도우미가 단지'command'를 감싸는 것처럼 응답이 의미가 있습니다. – kmfk

관련 문제