2014-03-19 1 views
1

주어진 구형 검색에 대해 가까운 문서를 다루는 소형 모듈을 연구 중입니다. mongoid3으로 작업하는 동안 주어진 위도, 경도 및 구형 거리를 사용하여 문서를 조회하려면 다음을 사용했습니다.mongoid에서 "within_spherical_circle"을 사용하여 거리별로 정렬 된 문서를 얻는 방법

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

주어진 latlong에서 20km 범위 내의 문서 결과를 제공합니다. 또한 이것이 순수 몽고드 기준이기 때문에 이것에 한계와 페이지 매김을 적용 할 수 있습니다.

그러나이 결과로 문서는 기본적으로 정렬 된 순서로 제공되지 않습니다. (또한 within_spherical_circle과 함께 어떤 옵션도 찾을 수 없습니다. 거리별로 정렬 된 문서를 제공합니다. geo_near 메쏘드를 시도했지만 페이지 매기기/건너 뛰기가 어렵습니다. 어떤 제안?

UPDATE

또한, 나는 나에게 정렬 된 순서로 결과와 그 일을 정확히 같은를 제공하는 가정

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

로 mongoid 3.1.X geo_near 방법을 시도했다. MongoDB를 에 대한

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

하지만 이것은 고려하지 않는 페이지는 일을 건너 $.

답변

0

난 당신이 거리 방법이있는 경우, 당신은 당신의 모델 다음

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

@array_of_items_in_the_circle.sort_by(&:distance) 

희망 같은 배열을 주문 sort_by 사용이 뭔가를 정의 할 수 있습니다, 여기 추측하고있어 도움이

+0

아 ... 네, 당신의 의견에 동의합니다. 그리고 지금 제가하고있는 일입니다. 그러나 주어진 반지름에 50 개의 문서가 있고 10 또는 20의 한계를 사용한다고 가정합니다. ** within_spherical_circle **에서 정렬 된 결과를 제공하지 않으면 가장 가까운 10 또는 20 만 있는지 확인하기가 어렵습니다. . 그렇지 않으면 더 큰 데이터 청크 (50 또는 100)를 요청해야합니다. 결과 배열을 정렬하고 결과 배열을 사용 제한하여 원하는 결과를 얻습니다 (약). 어떤 추측이라도? – r3bo0t

+0

또한 솔루션을 사용하여 일부 특정 서클의 경우 밀도가 100,000 개가 넘는 문서를 보유하고 있습니다. 따라서,이 특별한 경우에는 완전한 결과 집합에 대한 거리 계산을 수행하는 것이 불가능합니다. – r3bo0t

+0

많은 양의 데이터가 있음을 알고 있지만 정렬 후에는 한도를 적용 할 수 없습니까? 당신은 이것을 위해'@ array_of_items_in_the_circle.sort_by (& : distance) .take (20)'를 사용할 수 있습니다. – Alexis

관련 문제