2dsphere
Indexes
이 페이지의 내용
개요
2dsphere
인덱스 는 지구와 같은 구에서 도형을 계산하는 쿼리를 지원합니다. 2dsphere
인덱스 는 모든 MongoDB 지리 공간적 쿼리(포함, 교차 및 근접에 대한 쿼리)를 지원합니다. 지리 공간적 쿼리에 대한 자세한 내용은 지리 공간적 쿼리를 참조하세요.
2dsphere
인덱스 는 GeoJSON 객체 및 legacy coordinate pairs 으로 저장된 데이터를 지원합니다( 2dsphere
인덱스 필드 제한 참조). legacy coordinate pairs 의 경우 인덱스 는 데이터를 GeoJSON Point
로 변환합니다.
버전
2dsphere 인덱스 버전 | 설명 |
---|---|
버전 3 | MongoDB 3.2에는 |
버전 2 | MongoDB 2.6에는 |
기본 버전을 재정의하고 다른 버전을 지정하려면 인덱스를 생성할 때 { "2dsphereIndexVersion": <version> }
옵션을 포함합니다.
sparse
속성
버전 2 이상 2dsphere
인덱스는 항상 sparse 하며 sparse 옵션을 무시합니다. 문서에 2dsphere
인덱스 필드가 없는 경우(또는 필드가 null
또는 빈 배열인 경우) MongoDB는 문서에 대한 항목을 인덱스에 추가하지 않습니다. 삽입의 경우 MongoDB는 문서를 삽입하지만 2dsphere
인덱스에 추가하지는 않습니다.
다른 유형의 키와 함께 2dsphere
인덱스 키를 포함하는 복합 인덱스의 경우, 2dsphere
필드만이 인덱스가 문서를 참고하는지 여부를 결정합니다.
이전 버전의 MongoDB는 2dsphere (Version 1)
인덱스만 지원합니다. 2dsphere (Version 1)
인덱스는 기본적으로 희박 하지 않으며 null
위치 필드가 있는 문서를 거부합니다.
추가 GeoJSON 객체
버전 2 이상 2dsphere
인덱스에는 추가 GeoJSON 객체 MultiPoint
, MultiLineString
, MultiPolygon
및 GeometryCollection
에 대한 지원이 포함됩니다. 지원되는 모든 GeoJSON 객체에 대한 자세한 내용은 GeoJSON 객체를 참조하세요 .
고려 사항
geoNear
및 $geoNear
제한
$geoNear
파이프라인 단계에 key
옵션을 지정하여 사용할 인덱싱된 필드 경로 를 나타낼 수 있습니다. 이렇게 하면 여러 개의 인덱스 및/또는 여러 개의 2d 인덱스 가 있는 컬렉션 에서 단계를 사용할 $geoNear
수 있습니다.2dsphere
collection에 여러 개의
2dsphere
인덱스 및/또는 여러 2D 인덱스가 있는 경우key
옵션을 사용하여 사용할 인덱싱된 필드 경로를 지정해야 합니다.key
을 지정하지 않으면key
이 없으면 여러2d
인덱스 또는2dsphere
인덱스 중에서 인덱스를 선택하는 것이 모호하므로 여러 개의2dsphere
인덱스 및 여러 개의 2D 인덱스를 가질 수 없습니다.
참고
key
을 지정하지 않고 최대 하나의 2dsphere
인덱스 및 하나의 2D 인덱스만 있는 경우 MongoDB는 먼저 사용할 2d
인덱스를 찾습니다. 2d
인덱스가 없으면 MongoDB는 사용할 2dsphere
인덱스를 찾습니다.
샤드 키 제한
collection을 샤딩할 때는 2dsphere
인덱스를 샤드 키로 사용할 수 없습니다. 그러나 다른 필드를 샤드 키로 사용하여 샤드 collection에 지리 공간적 인덱스를 생성할 수 있습니다.
2dsphere
인덱싱된 필드 제한
2dsphere 인덱스가 있는 필드는 좌표 쌍 또는 GeoJSON 데이터 형태의 도형 데이터를 보유해야 합니다. 도형이 아닌 데이터가 있는 문서를 2dsphere
인덱스 필드에 삽입하거나 인덱스 필드에 도형이 아닌 데이터가 있는 컬렉션에 2dsphere
인덱스를 빌드하려고 하면 작업이 실패합니다.
제한된 수의 인덱스 키
2dsphere 인덱스에 대한 키를 생성하기 위해 mongod
는 GeoJSON 도형을 내부 표현에 매핑합니다. 결과적인 내부 표현은 큰 값 배열일 수 있습니다.
mongod
가 배열을 포함하는 필드에 인덱스 키를 생성하면 mongod
은 각 배열 요소에 대한 인덱스 키를 생성합니다. 복합 인덱스의 경우, mongod
은 각 필드에 대해 생성된 키 세트의 데카르트 곱 을 계산합니다. 두 세트가 모두 큰 경우 데카르트 곱을 계산하면 작업이 메모리 제한을 초과할 수 있습니다.
indexMaxNumGeneratedKeysPerDocument
는 메모리 부족 오류를 방지하기 위해 단일 문서에 대해 생성되는 최대 키 수를 제한합니다. 기본값은 문서당 100,000개의 인덱스 키입니다. 제한을 올릴 수는 있지만 indexMaxNumGeneratedKeysPerDocument
매개 변수가 지정한 것보다 더 많은 키가 필요한 경우 작업이 실패합니다.
인덱스 만들기 2dsphere
2dsphere
인덱스를 만들려면 db.collection.createIndex()
메서드를 사용하고 문자열 리터럴 "2dsphere"
를 인덱스 형식으로 지정합니다.
db.collection.createIndex( { <location field> : "2dsphere" } )
여기서 <location field>
은 값이 GeoJSON 객체 또는 레거시 좌표 쌍인 필드입니다.
참고
geoJSON 점 배열이 포함된 필드에 인덱스를 만들려고 하면 인덱스 빌드가 실패하고 다음 오류가 반환됩니다.
MongoServerError: Index build failed
하나의 위치 필드와 하나의 다른 필드를 참고할 수 있는 복합 2D 인덱스와 달리, 복합 2dsphere
인덱스는 여러 위치 및 비위치 필드를 참고할 수 있습니다.
다음 예제에서는 loc
이라는 필드에 위치 데이터를 GeoJSON 점 로 저장하는 문서가 있는 collection places
을 고려합니다.
db.places.insertMany( [ { loc : { type: "Point", coordinates: [ -73.97, 40.77 ] }, name: "Central Park", category : "Parks" }, { loc : { type: "Point", coordinates: [ -73.88, 40.78 ] }, name: "La Guardia Airport", category : "Airport" } ] )
인덱스 만들기 2dsphere
다음 작업은 위치 필드 loc
에 2dsphere 인덱스를 생성합니다.
db.places.createIndex( { loc : "2dsphere" } )
인덱스 키로 복합 인덱스 만들기 2dsphere
복합 인덱스 에는 2dsphere
인덱스 키와 비지리 공간적 인덱스 키가 함께 포함될 수 있습니다. 예를 들어, 다음 작업은 첫 번째 키 loc
가 2dsphere
인덱스 키이고 나머지 키 category
및 names
가 비지리 공간적 인덱스 키, 특히 내림차순(-1
)인 복합 인덱스를 생성합니다. 및 오름차순(1
) 키를 사용합니다.
db.places.createIndex( { loc : "2dsphere" , category : -1, name: 1 } )
2D 인덱스와 달리 복합 2dsphere
인덱스는 위치 필드가 첫 번째로 인덱싱되는 필드일 필요가 없습니다. 예를 들면 다음과 같습니다.
db.places.createIndex( { category : 1 , loc : "2dsphere" } )