2d
인덱스 내부
이 문서에서는 MongoDB의 2d
지리 공간적 인덱스의 내부에 대한 자세한 설명을 제공합니다. 이 자료는 정상적인 운영이나 애플리케이션 개발에는 필요하지 않지만 문제 해결 및 추가 이해에는 유용할 수 있습니다.
인덱스에 대한 Geohash 값 계산 2d
에legacy coordinate pairs 지리 공간적 인덱스 를 생성하면 는 지정된 MongoDB 위치 범위 내의 좌표 쌍에 대한 geohash 값을 계산한 다음 geohash 값을 인덱싱합니다.
geohash 값을 계산하려면 2차원 맵을 재귀적으로 사분면으로 나눕니다. 그런 다음 각 사분면에 2비트 값을 할당합니다. 예를 들어 4개의 사분면을 2비트로 표현하면 다음과 같습니다.
01 11 00 10
이러한 2비트 값(00
, 01
, 10
및 11
)은 각 사분면과 각 사분면 내의 모든 점을 나타냅니다. 해상도가 2비트인 geohash의 경우 왼쪽 하단 사분면의 모든 점은 00
의 geohash를 갖습니다. 왼쪽 상단 사분면의 geohash는 01
입니다. 오른쪽 하단과 오른쪽 상단은 각각 10
및 11
의 geohash를 갖습니다.
정밀도를 높이려면 각 사분면을 하위 사분면으로 계속 나눕니다. 각 하위 사분면에는 포함 사분면의 geohash 값이 하위 사분면의 값과 연결됩니다. 오른쪽 상단 사분면에 대한 geohash는 11
이고 하위 사분면에 대한 geohash는 ( 왼쪽 상단에서 시계 방향으로 ) 각각 1101
, 1111
, 1110
및 1100
입니다.
인덱스에 대한 다중 2d
위치 문서
참고
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" } )