2014-05-14 4 views
0

, 어떤 날짜 만 하루 달 사용하지 않고 문서를 찾기 : 내가하려고하면MongoId는이 같은 현재의 월과 일 모든 문서를 찾기 위해 노력하고

Kid.where("birthday.day" => Time.now.day, "birthday.month" => Time.now.month).first 

나는 항상 전무를 얻을에게, 이벤트를 이 모든 문서를 찾으려면

Kid.where("birthday.day" => Time.now.day, "birthday.month" => Time.now.month).all.to_a 

나는 아무것도 얻지 못했습니다. 그러나 나는이 날과 달에 기록을 가지고있다.

그래서 저는 분명히 뭔가 잘못하고 있습니다.

어떤 도움을

+0

'birthday'은 스키마의 해시입니까? –

+0

내 모델의 타입 날짜입니다 – Jean

답변

1

은 정말 좋은 생각 당신은 실제로 당신이보고하고자하는 날짜에 $match 범위를 제시 할 수 없다 마십시오 제발하지 않는 한,하지만 aggregate() 방법은 당신이 이런 식으로 날짜를 해부 할 수 있습니다 :

Kid.collection.aggregate([ 
    { "$project" => { 
     "birthday" => { 
      "day" => { "$dayOfMonth" => "$birthday" }, 
      "month" => { "$month" => "$birthday" }, 
     }, 
     // other fields you want in the result 
    }}, 
    { "$match" => { 
     "birthday.day" => Time.now.day, 
     "birthday.month" => Time.now.month 
    }} 
]) 

그리고 그것은 일반적으로 "moped"문법으로 현재 mongoid에서 지원되는 문법입니다.

MongoDB 쿼리 번역이 "루비 코드"가 아니므로 실제로 구문에서 허용되는 것보다 "엄격한"번역이 필요하다는 것이 핵심입니다. 따라서 시도한 방식으로 데이터 저장소의 "날짜 유형"필드에 day 또는 month 속성에 액세스 할 수 없습니다. 대신 내부 기능을 사용합니다.

SQL과 전혀 다른 것은 아니지만 객체 변환 마법이 합리적으로 기대할 수있는 것보다 더 "마법 같은"것을 기대하지는 마십시오.

관련 문제