2013-05-01 6 views
1

내가 생일 오늘날 사용자를 반환하는 MongoDB의 쿼리를 만드는거야, 그래서 난이 문은 $에 기능을 JS 생성 :

function() { 
    if (! this.birthday.getMonth) {return false;} 

    return this.birthday.getMonth() == 1 
    && this.birthday.getDate() == 1 
} 

불행하게도, if 문은하지 않습니다 생일 필드가 문서에 설정되지 않은 경우 오류가 발생하는 것처럼 보이지만 작동하지 않는 것 같습니다.

JS Error: TypeError: this.birthday has no properties nofile_18 

도움을 환영합니다.

+0

this.birthday에서 null을 확인할 수 있지만 $를 통해이 작업을 수행하는 이유는 무엇입니까? – Sammaye

+0

쿼리 대상 문서 구조의 예를 포함시킬 수 있습니까? 즉 db.collection.findOne()을 사용하면 쿼리하는 대상을 볼 수 있습니다. –

+0

@Sammaye 사용자의 생일인지 확인하기 위해 날짜와 요일을 검색 할 수있는 유일한 방법이기 때문에 어디에서 사용하고 있습니까? –

답변

0

마지막으로 $ where 문을 $exists 앞에 붙이는 문제를 해결했습니다. '생일'필드가없는 경우에도 이제는 정상적으로 작동합니다.

0

생일 필드가 Date 또는 ISODate 유형으로 저장된다고 가정하면 정확한 비교를 위해 집계 프레임 워크를 사용할 수 있습니다. 나는 그것이 자바 스크립트 쉘을 시작하는 $보다 빠를 것이라고 생각한다.

// construct "thisMonth" variable which is current month as a number 
// and thisDay which is current date of the month as a number 
> var thisMonth = 5; 
> var thisDay = 1; 
> db.people.aggregate([ 
     {$project:{month:{$month:"$birthday"}, date:{$dayOfMonth:"$birthday"}}}, 
     {$match: {month:thisMonth, date: thisDay}} 
    ]) 
+0

그는 1988 년에 태어 났으 나 올해는 태어날 수 있었으므로 올해를 찾기가 어렵 기 때문에 올해를 저장하기 때문에 올해는 – Sammaye

+0

입니다.이 때문에 문서를 요구하는 것입니다. 때때로 그 종류의 것을 정확하게 시각화하기가 어렵습니다. ! 작동해야하는 agg 프레임 워크로 변경했습니다. –

+0

@AsyaKamsky $ 생일 필드가 문서에없는 경우에도 작동하는지 알려 드리겠습니다. –