2012-03-16 77 views
1

当前是否可以使用基于Mongoid的对象搜索BSON :: OrderedHashes数组?我的一个属性,我们称之为foobar类,看起来像下面这样: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'将寻找namefoo

+0

这太棒了。谢谢! – randombits 2012-03-16 20:45:11

+1

@randombits:另外,如果你可以在开头定位你的正则表达式(例如'/ Grocery /'),那么你可以索引'foo.name',并且MongoDB将使用索引来进行正则表达式搜索。 – 2012-03-16 20:56:01

0

没有测试过这个,但我认为像这样的东西可能会起作用。

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