如何通过mongoid中的“within_spherical_circle”获取按距离排序的文档

时间:2014-03-19 05:40:26

标签: ruby-on-rails mongodb mongoid mongoid3

我正在开发一个小模块,用于处理附近的文件以进行给定的球形查找。使用 mongoid3 时,我使用以下内容接收具有给定纬度,经度和球距的文档来查找文档。

document_klass.within_spherical_circle(geo_attribute: [[77.04363, 28.45842], (20.fdiv(6371))])

从给定的latlong给出20公里范围内的文档结果。此外,我可以对此进行限制和分页,因为这是一个纯粹的mongoid标准。

但是这样做的结果默认情况下不会按排序顺序提供文档。 (而且我也无法找到 within_spherical_circle 的任何选项,它会为我提供按距离排序的文档) 我也尝试过 geo_near 方法,但很难做到分页/跳过。有什么建议吗?

更新

另外,我尝试了mongoid 3.1.x geo_near 方法作为

document_class.limit(10).geo_near([77.04363, 28.45842]).distance_multiplier(6371).max_distance(10.fdiv(6371)).spherical

假设以排序的顺序给我结果,并且它完全相同。

[0.0, 0.013106917278934711, 0.014252314759648424, 0.01842674324658152, 0.02131271009525241, 0.022594202024593005, 0.024637859034323726, 0.02501954892893619, 0.02501954892893619, 0.025071008433970268]

但这并不考虑,mongodb页面 $ skip 的事情。

1 个答案:

答案 0 :(得分:0)

我猜这里,如果你有一个距离方法,你可以在你的模型中定义这样的东西

def distance(object_to_calculate_distance)
  self.method(object_to_calculate_distance)
  #method should be the method predefined for distance
end

然后使用sort_by对数组进行排序,如

@array_of_items_in_the_circle.sort_by(&:distance)

希望有所帮助