Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

2d 인덱스 내부

이 페이지의 내용

  • 2d 인덱스에 대한 Geohash 값 계산
  • 2d 인덱스에 대한 다중 위치 문서

이 문서에서는 MongoDB의 2d 지리 공간적 인덱스의 내부에 대한 자세한 설명을 제공합니다. 이 자료는 정상적인 운영이나 애플리케이션 개발에는 필요하지 않지만 문제 해결 및 추가 이해에는 유용할 수 있습니다.

legacy coordinate pairs 지리 공간적 인덱스 를 생성하면 는 지정된 MongoDB 위치 범위 내의 좌표 쌍에 대한 geohash 값을 계산한 다음 geohash 값을 인덱싱합니다.

geohash 값을 계산하려면 2차원 맵을 재귀적으로 사분면으로 나눕니다. 그런 다음 각 사분면에 2비트 값을 할당합니다. 예를 들어 4개의 사분면을 2비트로 표현하면 다음과 같습니다.

01 11
00 10

이러한 2비트 값(00, 01, 1011)은 각 사분면과 각 사분면 내의 모든 점을 나타냅니다. 해상도가 2비트인 geohash의 경우 왼쪽 하단 사분면의 모든 점은 00 의 geohash를 갖습니다. 왼쪽 상단 사분면의 geohash는 01 입니다. 오른쪽 하단과 오른쪽 상단은 각각 1011 의 geohash를 갖습니다.

정밀도를 높이려면 각 사분면을 하위 사분면으로 계속 나눕니다. 각 하위 사분면에는 포함 사분면의 geohash 값이 하위 사분면의 값과 연결됩니다. 오른쪽 상단 사분면에 대한 geohash는 11 이고 하위 사분면에 대한 geohash는 ( 왼쪽 상단에서 시계 방향으로 ) 각각 1101, 1111, 11101100 입니다.

참고

2d 지리 공간적 인덱스는 문서에서 둘 이상의 지리 공간적 필드를 지원하지 않지만 다중 키 인덱스 를 사용하여 단일 문서에서 여러 좌표 쌍을 인덱싱할 수 있습니다. 가장 간단한 예에는 필드가 있을 수 있습니다(예: locs), 다음 예제와 같이 좌표 배열을 보유합니다.

db.places.save( {
locs : [ [ 55.5 , 42.3 ] ,
[ -74 , 44.74 ] ,
{ lng : 55.5 , lat : 42.3 } ]
} )

배열의 값은 [ 55.5, 42.3 ] 과 같은 배열이거나 { lng : 55.5 , lat : 42.3 } 과 같은 내장된 문서일 수 있습니다.

그런 다음 다음과 같이 locs 필드에 지리 공간적 인덱스를 만들 수 있습니다.

db.places.createIndex( { "locs": "2d" } )

위치 데이터를 내장된 문서 내부의 필드로 모델링할 수도 있습니다. 이 경우 문서에는 다음 필드가 포함됩니다(예: 각 문서에 필드가 있는 문서 배열을 보유하는 addresses)(예: loc:)에 위치 좌표를 저장합니다. 예를 들면 다음과 같습니다.

db.records.save( {
name : "John Smith",
addresses : [ {
context : "home" ,
loc : [ 55.5, 42.3 ]
} ,
{
context : "work",
loc : [ -74 , 44.74 ]
}
]
} )

그런 다음 다음 예시와 같이 addresses.loc 필드에 지리 공간적 인덱스를 생성할 수 있습니다.

db.records.createIndex( { "addresses.loc": "2d" } )

돌아가기

2d 인덱스 쿼리