Mongoid:数组包含另一个数组的任何值

时间:2018-08-02 16:25:29

标签: ruby-on-rails arrays mongodb mongoid

我有一个带有“城市”数组字段的Map对象

class Map
  include Mongoid::Document
  field :cities, type: Array
end

我想从另一个数组中搜索至少存在一个城市的所有Map。像这样:

# map1.cities = ['London', 'Manchester']
# map2.cities = ['Paris', 'Lyon']
# map3.cities = ['Berlin', 'Munich']
# searchedCities = ['London', 'Paris']

在这种情况下,我希望所有包含至少一个searchedCities的地图; map1和map2。

这不起作用,因为它会比较整个数组

Map.where(cities: searchedCities)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以使用.any_in(找不到直接文档)为您生成一个$in mongodb查询,并且如果该字段包含给定数组中的任何值,则它与文档匹配。 / p>

在您的情况下:

Map.any_in(cities: searched_cities)
 => #<Mongoid::Criteria
  selector: {"cities"=>{"$in"=>["London", "Paris"]}}
  ...
  class:    Map>