2012-01-01 3 views
5

PHP 배열 구문을 사용하여이 MongoDB 쿼리에 문제가 있습니다. 이것은 사용하려는 쿼리의 직접적인 버전입니다.

db.collection.find({ 
     $or: [ 
      {$and : [{X:1}, {X: {$gt: 100}}]}, 
      {$and : [{X:2}, {X: {$lt: 100}}]} 
     ] 
}); 

참고 : 실제 쿼리, 더 복잡하다 이것은 단지 예입니다.

PHP에서 이러한 종류의 쿼리를 설명하는 몇 가지 예제를 찾을 수 없었습니다. 내가 왔어요 가장이되었다 :

$query = array(
    '$or' => array(
     array(
      '$and' => array(
       array('X' => 1), 
       array('X' => array('gt' => 100)) 
      ) 
     ), 
     array(
      '$and' => array(
       array('X' => 2), 
       array('X' => array('lt' => 100)) 
      ) 
     ), 
    ) 
); 

$this->db->collection->find($query); 

그러나이 쿼리 결과가 반환되지 않습니다. 분명히 우리는 PHP 배열에서 중복 키를 가질 수 없기 때문에 $and을 배열에서 제거 할 수 없습니다.

속도가 중요하기 때문에 JavaScript 표현식을 사용하고 싶지 않습니다.

업데이트 : 알렉산더 아자 로프 (Alexander Azarov)가 주석에서 지적했듯이, 원래의 쿼리는 다르게 쓰여질 수 있습니다. 제대로 사용 된 $and 쿼리로 질문을 업데이트했습니다.

+0

정확히 작동하지 않는 기능은 무엇입니까? 오류 메시지가 있습니까? –

+0

쿼리가 올바르게 실행되지만 결과는 0입니다. –

+0

샘플 데이터 덤프를 게시 할 수 있습니까? –

답변

10

다음은 Mongo 쿼리를 위해 PHP에서 또는 연산자를 사용하는 코드 예제입니다.

쿼리에서 찾을 항목과 다른 필드 이름을 사용하지만 사용법을 이해하는 것은 간단합니다.

지금은 쿼리를 변경하기 위해 시간을 변경할 필요가 없지만 문제가있는 경우 알려 주시면 조정 해 드리겠습니다. 이 쿼리는 작동하고 찾아야 할 것을 찾습니다.

$arrFind = array(
    '$or' => array(
     array(
      '$and' => array(
       array(
        UI_name => array(
         '$regex' => 'andrew', 
         '$options' => 'i' 
        ) 
       ), 
       array(
        UI_surname => array(
         '$regex' => 'mik', 
         '$options' => 'i' 
        ) 
       ) 
      ) 
     ), 
     array(
      '$and' => array(
       array(
        UI_surname => array(
         '$regex' => 'andrew', 
         '$options' => 'i' 
        ) 
       ), 
       array(
        UI_name => array(
         '$regex' => 'mik', 
         '$options' => 'i' 
        ) 
       ) 
      ) 
     ), 
    ) 
);