0

我的 Rails 项目中有两个模型:人物和嵌入式集合,城市。还有一个关于城市的空间指数。我想找到一个城市附近的所有人。

class Person
 include Mongoid::Document
 include Mongoid::Timestamps
 embeds_many :cities
 scope :nearby, ->(location, distance) { where('cities.location' => 
                    {'$near' => location , '$maxDistance' => distance})}


class City
  include Mongoid::Document
  include Mongoid::Timestamps
  embedded_in :person
  field :city
  field :location, type: Array  #0: latitude, 1: longitude

location_in_new_york = [40.71892, -74.00131]

我的查询是

Person.nearby(location_in_new_york, 1)

但是这样做,一个拥有两个非常接近的城市的人会被发现两次。我怎样才能避免这种行为?我不想在 ruby​​ 中减少这个,因为我想保持我的范围。

4

1 回答 1

1

虽然不如仅仅能够调用.distinct一个标准那么干净,但这种解决方法给出了预期的结果:

Person.find(Person.nearby(location_in_new_york, 1).distinct(:_id))

但是,这不能(如所写)作为范围起作用,因此您必须将其设为类方法。就个人而言,我会考虑向 mongoid 添加一个补丁来添加一个.unique方法来做你想要的(因为当你使用它的不同运算符时,MongoDB 负责返回字段值而不是文档:http ://www.mongodb.org/display /DOCS/聚合

于 2012-08-06T11:40:50.280 回答