2d 인덱스 에 포함된 좌표 범위 를 정의할 수 있습니다. 기본값 으로 2d 인덱스의 경도 및 위도 경계는 다음과 같습니다.
크거나 같음
-180보다 작은
180
2D 인덱스의 위치 범위를 변경하려면 인덱스를 생성할 때 min 및 max 옵션을 지정합니다.
db.<collection>.createIndex( { <location field>: "2d" }, { min: <lower bound>, max: <upper bound> } )
min 및 max 경계는 포괄적 이며 경도와 위도 모두에 적용됩니다.
이 작업에 대하여
중요
2D 인덱스의 기본 위치 경계는 유효하지 않은 값인 -90 미만과 90보다 큰 위도를 허용합니다. 이러한 유효하지 않은 점이 있는 지리 공간적 쿼리의 동작은 정의되어 있지 않습니다.
2D 인덱스에 대해 더 작은 위치 범위를 정의하면 인덱스에 저장되는 데이터의 양이 줄어들고 쿼리 성능이 향상될 수 있습니다.
collection에 인덱스의 위치 범위를 벗어난 좌표 데이터가 포함된 경우 2D 인덱스를 만들 수 없습니다.
2D 인덱스를 생성한 후에는 인덱스의 위치 범위를 벗어난 좌표 데이터가 포함된 문서를 삽입할 수 없습니다.
시작하기 전에
contacts 컬렉션을 생성합니다.
db.contacts.insertMany( [ { name: "Evander Otylia", phone: "202-555-0193", address: [ 55.5, 42.3 ] }, { name: "Georgine Lestaw", phone: "714-555-0107", address: [ -74, 44.74 ] } ] )
address 필드에는 레거시 좌표 쌍이 포함되어 있습니다.
절차
address 필드에 2D 인덱스를 만듭니다. 다음 위치 경계를 지정합니다:
min~의 경계-75max~의 경계60
db.contacts.createIndex( { address: "2d" }, { min: -75, max: 60 } )
결과
이 인덱스는 위치 범위가 더 좁으며 기본 2D 인덱스보다 성능이 향상되었습니다.
인덱스를 생성한 후에는 인덱스의 위치 범위를 벗어난 좌표 데이터가 포함된 문서를 삽입할 수 없습니다. 예를 들어, 다음 문서는 삽입할 수 없습니다 :
db.contacts.insertOne( { name: "Paige Polson", phone: "402-555-0190", address: [ 70, 42.3 ] } )
address 필드의 경도 값은 70 이며, 이는 60 의 max 경계보다 높습니다.
다음 단계
2D 인덱스를 사용하여 근접 쿼리와 같은 위치 데이터에 대한 계산을 수행할 수 있습니다.