2013-08-20 5 views
5

MongoDB에 현재 어떤 것이 있는지 여부를 정의하는 두 개의 날짜가있는 콜렉션이 있습니다. 그래서 나는 null 일 수있는 "end_date"를 가지고 있거나 시간 값을 가질 수 있습니다. 현재 항목의 끝에 end_date 또는 미래의 시간이있는 항목입니다. 내 검색어는 다음과 같습니다.MongoDB - 값이 널이거나 X보다 작은 결과를 찾습니다

program_enrollments.find({"start_date":{"$lte":1376982000},"end_date":[null,{"$gte ":1376982000}],"client":"52002d02cc94a31a0f000000"}, []) 

이 방법은 적절하지만 다른 방법이 필요합니까? 나는 그것을 피할 수있는 경우 날짜가 최신인지 여부를 나타내는 부울 플래그를 갖고 싶지 않습니다.

답변

9

조작 배열을 허용하는 $or 조작을 찾고 있습니다. 그것은과 같이 될 것이다 :

$or: [{end_date: null}, {end_date: {$gte: 1376982000}}] 

귀하의 전체 쿼리의 모습 :

program_enrollments.find({ 
    start_date: {$lte: 1376982000}, 
    $or: [ 
    {end_date: null}, 
    {end_date: {$gte: 1376982000}} 
    ], 
    client:"52002d02cc94a31a0f000000" 
}) 

이 확장하려면 어느 $gte$lte 연산자를 제거하는 방법을 찾아야 할 것입니다. MongoDB는 쿼리의 다른 속성에 $lte$gte의 조합을 사용할 수 없습니다.

0

{end_date: null} 대신 {end_data: {$exists: false}}을 사용하여 변수가 존재하는지 물어볼 수 있습니다. 문서의 null 값이 end_date 인 경우 첫 번째 값은 작동하고 두 번째 값은 작동하지 않습니다.

+1

'{end_date : null}'은 누락으로 인해 필드가 단순히 존재하지 않았던 경우에도 적용됩니다. {end_data : {$ exists : false}}는 적어도 ... v3.0 테스트 – pulkitsinghal

관련 문제