轨道上的红宝石 - 如何在 mongoid 中通过与"within_spherical_circle"的距离对文档进行排序



我正在研究一个小模块,该模块处理给定球形查找的附近文档。在使用mongoid3时,我使用以下命令来接收具有给定纬度、经度和球面距离的文档以查找文档。

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

给出距离给定曲线20公里范围内的文档的结果。我还可以在此应用限制和分页,因为这是一个纯蒙古标准。

但是在默认情况下,这样做的结果并没有按照排序的顺序给出文档。(而且我也无法找到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的东西。

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

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)

希望有所帮助

最新更新