我正在研究一个小模块,该模块处理给定球形查找的附近文档。在使用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)
希望有所帮助