Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / /

2D 인덱스 내부

이 페이지의 내용

  • Geohash 값
  • 2D 인덱스를 위한 다중 위치 문서
  • 내장된 다중 위치 문서
  • 자세히 알아보기

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

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

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

01 11
00 10

이러한 2비트 값(00, 01, 1011)은 각 사분면과 각 사분면 내의 모든 점을 나타냅니다. 각 사분면에는 해당 geohash 값이 있습니다.

사분면
geohash
왼쪽 하단
00
왼쪽 상단
01
오른쪽 하단
10
오른쪽 상단
11

추가 정밀도를 제공하기 위해 MongoDB는 각 사분면을 하위 사분면으로 나눌 수 있습니다. 각 하위 사분면에는 하위 사분면의 값과 연결된 포함 사분면의 geohash 값이 있습니다. 예를 들어 오른쪽 상단 사분면에 대한 geohash는 11 이고 하위 사분면에 대한 geohash는 (좌측 상단에서 시계 방향):

  • 1101

  • 1111

  • 1110

  • 1100

2D 인덱스는 문서에서 둘 이상의 위치 필드를 지원하지 않지만, 다중 키 인덱스 를 사용하여 단일 문서에서 여러 좌표 쌍을 인덱스할 수 있습니다. 예를 들어 다음 문서에서 locs 필드에는 좌표 쌍의 배열이 있습니다.

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

locs 배열의 값은 다음 중 하나일 수 있습니다.

  • 배열(예: [ 55.5, 42.3 ].

  • 내장된 문서(예: { long : 55.5 , lat : 42.3 }.

locs 배열의 모든 좌표 쌍을 인덱스하려면 locs 필드에 2D 인덱스를 만듭니다.

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

위치 데이터를 내장된 문서 내부의 필드로 저장할 수 있습니다. 예를 들어, 각 내장된 문서에 위치 데이터가 포함된 필드가 있는 내장된 문서 배열이 있을 수 있습니다.

다음 문서에서 addresses 필드는 내장된 문서의 배열입니다. 내장된 문서에는 좌표 쌍인 loc 필드가 포함되어 있습니다.

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

addresses 배열의 모든 loc 값을 인덱스하려면 addresses.loc 필드에 2D 인덱스를 만듭니다.

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

돌아가기

표면의 모양