2011-08-16 7 views
3

私は1日のモデルを持ち、毎日タグハッシュを含んでいます。ハッシュのキーに関するMongomapperクエリ

class Day 
    include MongoMapper::Document 

    key :tags, Hash 
    ... 
end 

タグのハッシュは、私が見つけることができるクエリを記述したいと思い、この{ "" => 4、 "B" => 1、 "C" => 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

解決策が見つかりました。

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

は、これは '' キーですべての日を返します。

実際、私はこのような特定のタグにより、すべての日を取得するのは簡単だろう。この

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

のような日のための方法を記述することができます。

Day.find_all_by_tag("a") 
関連する問題