我有一个模型:
class City
include Mongoid::Document
field :name
embeds_many :stores
index [["stores.location", Mongoid::GEO2D]]
end
class Store
include Mongoid::Document
field :name
field :location, :type => Array
embedded_in :cities, :inverse_of => :stores
end
然后我尝试调用类似City.stores.near(@location)
的内容。
我想查询City
集合,以返回在附近位置至少有1 Store
的所有城市。我该如何设置索引?什么是最快的电话?
我使用index [[:location, Mongo::GEO2D]]
阅读了Mongoid文档,但我不确定这如何应用于嵌入式文档,或者如何仅获取City
而不是所有Stop
文档。
答案 0 :(得分:7)
麦克,
您要求的功能称为多位置文档。目前的稳定版本1.8.2不支持它。这仅适用于1.9.1版。
使用mongoid时查询很简单,就像这样
City.near("stores.location" => @location)
在多位置文档中使用近查询时要小心,因为同一文档可能会多次返回,因为$ near查询会按距离返回有序结果。您可以阅读有关此here的更多信息。
在查询中使用$来获得正确的结果
使用$ within和$ centerSphere
编写的相同查询EARTH_RADIUS = 6371
distance = 5
City.where("stores.location" => {"$within" => {"$centerSphere" => [@location, (distance.fdiv EARTH_RADIUS)]}})