2012-03-16 15 views
1

MongoidベースのオブジェクトでBSON :: OrderedHashの配列を検索することは現在可能ですか?私の属性の一つ、のbarクラスでfooそれを呼びましょうには、次のようになります。Mongoid:配列を検索

[#<BSON::OrderedHash:0x7f0 {"id"=>"4bf58dd8d48988d118951735", "name"=>"Grocery or Supermarket", "pluralName"=>"Grocery or Supermarkets", "shortName"=>"Grocery Store", "icon"=>#<BSON::OrderedHash:0x7f2 {"prefix"=>"https://foursquare.com/img/categories/shops/food_grocery_", "sizes"=>[32, 44, 64, 88, 256], "name"=>".png"}>, "primary"=>true}>] 

私は私のすべてのオブジェクトを通過し、ためにこの順ハッシュに食料品が含まれているすべてのものを見つけたいです'name'属性。

答えて

6

私はあなたがこのような何かを行うことができるはずだと思う:

Bar.where('foo.name' => /Grocery/) 

のMongoDBのmultikeys supportは、配列の要素を検索するの世話をすると'foo.name'foonameを探します。

+0

これは素晴らしいです。ありがとう! – randombits

+1

@randombits:最初に正規表現を固定することができれば( '/^Grocery /'など)、 'foo.name'にインデックスを付けることができ、MongoDBは正規表現検索のインデックスを使用します。 –

0

これはテストしていませんが、このようなものはおそらく動作すると思います。

Bar.all.select {|b| b.foo.select{|f| f['name'] == 'Grocery'}.size > 0}