2013-08-16 1 views
2

컬렉션이 있습니다. 이름 : 이벤트 :소스 및 대상에 대한 MongoDB 공간 쿼리

각 이벤트 컬렉션의 소스 및 대상은 lat long입니다.

이벤트 컬렉션에 대한 쿼리를 작성하고 목적지로부터 일정 거리 이내에있는 이벤트 만 가져오고 싶습니다.

MongoDB는 하나의 컬렉션에서 두 개의 지형 공간 인덱스를 지원하지 않는다는 사실을 읽었습니다.

내 데이터 모델이 어떻게 생겼는지와 어떻게 목적을 달성하기 위해 쿼리를 만들 수 있습니까?

감사합니다.

답변

1

당신은 몇 가지 옵션이 당신을 잎 있도록 지리적 인덱스 제한와 함께 작동하도록해야합니다. 하나는 두 개의 콜렉션을 작성하고 두 개의 조회를 실행하고 응용 프로그램 레벨에서 교차를 분석하는 것입니다. 이것은 당신이하는 일에 따라 비쌀 수 있습니다.

다른 시나리오는 하나의 컬렉션을 사용하지만 원본 및 대상 주변 영역의 교차 영역을 나타내는 일부 지오메트리를 $ geowith로 확인하도록 쿼리를 변경합니다. 출발지와 목적지의 어느 정도 거리에있는 이벤트를 쿼리하기 때문에 교차 영역이 있음을 의미합니다. 교차 지오메트리를 계산하는 것은 당신에게 달려 있습니다. 가능하면 이러한 교차점을 사전 계산하고 저장할 수 있습니다.

1

현재 컬렉션 당 1 개의 지형 공간 인덱스 만있을 수 있습니다. MongoDB가 다중 인덱스를 만들 수는 있지만이 동작은 지원되지 않습니다. MongoDB를 단지 하나의 쿼리를 지원하기 위해 하나의 인덱스를 사용할 수 있기 때문에, 대부분의 경우, 여러 지리적 인덱스를 갖는 것은 바람직하지 않은 행동을 생산할 예정이다

당신이 투표를 할 수 있습니다 이것에 대한 JIRA에서 몇 티켓이 있습니다

https://jira.mongodb.org/browse/SERVER-2331

https://jira.mongodb.org/browse/SERVER-3653