2011-08-16 3 views
3

나는 하루 동안 모델을 가지고 있으며 매일 태그 해시를 포함합니다.해시 키에 대한 Mongomapper 쿼리

class Day 
    include MongoMapper::Document 

    key :tags, Hash 
    ... 
end 

태그 해시는 다음과 같을 수 {=> 1, "C"를 "A"=> 4의 "B"=> 1}

내가 찾을 수있는 쿼리를 작성하고 싶습니다 태그 키가 'a'와 같은 모든 요일. 키 이후

Day.where('tags.keys' => "a") 

이 작동하지 않습니다, 사실 해시의 키가 아닌 내가 그냥 키 방법을 사용할 수 없습니다 같은데요.

정말 해시의 키를 조회 할 수있는 방법이 있는지 알고 싶습니다, 그렇지 않으면 나는의 키를 저장하고 쿼리를 할 배열을 만들어야합니다.

tags = {"a"=>4, "b"=>1, "c"=>1, "names" => ["a", "b", "c"]} 

Day.where('tags.names' => "a") #This would work find, but is not what I want 

답변

5

해결책을 찾았습니다.

하루 였지 ('tags.a'=> { '$가 존재하는'=> TRUE})

이 제품은 'A'키를 사용하여 모든 일을 반환합니다.

Day.find_all_by_tag("a") 
:이

def self.find_all_by_tag(tag) 
    Day.where("tags.#{tag}" => {'$exists' => true}).all 
end 

같은 날하는 방법을 쓸 수있는 사실

그 다음이 같은 특정 태그의 모든 일을 쉽게 얻을 것

관련 문제