2011-08-16 54 views
3

我有一天的模型,每天都有一個標籤散列。Mongomapper對散列鍵的查詢

class Day 
    include MongoMapper::Document 

    key :tags, Hash 
    ... 
end 

的標籤散列可能看起來像這樣{ 「A」=> 4, 「B」=> 1, 「C」=> 1}

我想編寫一個查詢,可以找到標籤關鍵字等於'a'的所有日子。

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

這不起作用,因爲密鑰實際上並不是密鑰,我猜我不能只使用keys方法。

我真的很想知道是否有方法來查詢散列的鍵,否則我將不得不創建一個數組來存儲鍵和查詢。

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

我找到了解決辦法。

Day.where( 'tags.a'=> { '$存在'=>真})

這將返回所有天的 'A' 鍵。

其實我可以寫一個方法,每天都是這樣

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

然後,它會很容易被某些標籤像這樣讓所有的日子:

Day.find_all_by_tag("a")