2012-11-12 9 views
2

특정 날짜 범위에있는 '날짜'속성을 갖는 문서에 대해 mongodb를 쿼리하려고합니다. 이것이 제가하는 방법입니다.날짜 범위와 다른 조건을 사용하는 MongoDB 검색

Q1.

$searchCriteria = array('$and' => 
     array(
      'date' => array('$gt' => $start, '$lte' => $end), 
      'lid' => $lid 
      )); 

질문 2.

$results = $collection->find($searchCriteria); 

아무 것도 반환하지 않지만 각 검색 조건을 별도로 실행하면 작동합니다.

3.

이 작동
$searchCriteria = array(
      'date' => array('$gt' => $start, '$lte' => $end) 
      ); 

, 그것은이 기간이 너무 작동

$searchCriteria = array(
      'lid' => $lid 
      ); 

일치하는 문서를 반환, 모든 뚜껑의 I 요청한 것과 동일 반환합니다.

하지만 내가하고 싶은 조건이, 그것은 작동하지 않을 때, 여기에 검색 기준 Q1의 위해서 var_dump입니다 :

: 여기
array(1) { '$and' => array(2) { 'date' => array(2) { '$gt' => string(10) "2010-11-10" '$lte' => string(10) "2010-11-12" } 'lid' => int(6209) } } 

가 동일한 쿼리의 json_encoded 출력은 오류

db.largedaily.find({"$and":{"date":{"$gt":"2010-01-01","$lte":"2010-01-02"},"lid":6209}}); 

error: { "$err" : "$and expression must be a nonempty array", "code" : 14816 } 

무엇 오전에 몽고 쉘 결과에서 쿼리의 JSON 출력을 실행

{"$and":{"date":{"$gt":"2010-11-10","$lte":"2010-11-12"},"lid":6209}} 

내가 잘못하고있어? searchCriteria를 잘못 설정하고있는 것 같습니다.

답변

4

A1/A2 : 당신은 $이 필요하고 그런 식으로 대신 사용하지 않는 : 당신이 ([]로) 배열을 사용할 필요로

$searchCriteria = array(
    'date' => array('$gt' => $start, '$lte' => $end), 
    'lid' => $lid 
); 

를 쉘에서이 {"$and":{"date":{"$gt":"2010-11-10","$lte":"2010-11-12"},"lid":6209}}은 잘못 객체 ({})가 아닙니다.

{"$and":[ {"date":{"$gt":"2010-11-10","$lte":"2010-11-12"} }, {"lid":6209} ]} 

하지만 당신은 $and를 필요로하지 않으며, 당신은 사용할 수 있습니다 : 정답은 => 새로운

db.largedaily.find({"date":{ "$gt":"2010-11-10","$lte":"2010-11-12"}, {"lid":6209 }); 
+0

$ 경우 시작 및 $ 엔드 유닉스 타임 스탬프를하고, 그것이 있어야 '$에있다'를 MongoDate ($ start), '$ lte'=> 새로운 MongoDate ($ end) – codepiper