2011-10-10 4 views
2

나는 비교적 복잡한 쿼리를 실행하고 있습니다. 나는 그것을 아래에 포함 시켰지만 본질적으로 날짜/시간순으로 정렬되는 쿼리에서 $ 또는 $와 결합 된 위치 쿼리를 가지고 있습니다. 내림차순보다는 오름차순으로 반환하지만 전체 쿼리를 실행할 때마다MongoDB를 사용한 적절한 색인 생성 및 정렬

쿼리의 위치 부분을 제거하면 올바른 순서로 결과가 성공적으로 반환되지만 쿼리의 위치 구성 요소를 다시 넣으면 계속 실패합니다.

$query = array( 
     '$or' => array(
      array(ISPUBLIC => true), 
      array(GROUP_INVITES.".".TO.".".INVITE_VAL => array('$in' => $user_groups)) 
     ), 
     LOC => array('$near' => array((float)$lon , (float)$lat), '$maxDistance' => 1) //Using 1 degree for the max distance for now 
    ); 

$res = $this->db->find($query)->sort(array('ts'=>-1))->limit($limit)->skip($start); 

사용되는 필드는 데이터베이스의 필드에 매핑 상수 :

다음은 PHP로 작성된으로 쿼리입니다. 필자의 첫 번째 가정은 인덱스가 제대로 구성되지 않았지만 지리 정보 쿼리를 다른 인덱스와 결합 할 때이 인덱스를 어떻게 사용해야합니까? 나는 아래로 쿼리를 단순화하여 문제를 복제 할 수있었습니다

UPDATE :

$query = array( 
    HOLLER_GROUP_INVITES.".".HOLLER_TO.".".INVITE_VAL => array('$in' => $user_groups), 
    HOLLER_LOC => array('$near' => array((float)$lon , (float)$lat), '$maxDistance' => 1) 
); 

UPDATE 2

나는 추가 테스트를 실행했습니다 한계가 제거되면 올바른 방향으로 정렬됩니다. 무슨 일이 벌어지고 있는지 모르겠다.

답변