2d 및 2dsphere 인덱스는 지리 공간적 인덱스입니다. 지리 공간적 인덱스에는 다음과 같은 제한 사항이 있습니다.
데이터 정렬 옵션
2d 인덱스는 데이터 정렬 옵션을 지원하지 않고 바이너리 비교만 지원합니다. 이진 비교는 각 문자열에 있는 각 문자의 숫자 유니코드 값을 비교하며, 대소문자나 악센트 표시는 고려하지 않습니다.
단순 데이터 정렬이 아닌 collection에 2D 인덱스를 만들려면 인덱스를 만들 때 { collation: { locale: "simple"
} } 을(를) 명시적으로 지정해야 합니다.
예를 들어 { locale: "en" }의 데이터 정렬이 포함된 collationTest 컬렉션을 생각해 보겠습니다.
db.createCollection( "collationTest", { collation: { locale: "en" } } )
collationTest 컬렉션에 2D 인덱스를 생성하려면 { collation: { locale: "simple" } }을 지정해야 합니다. 이 명령은 loc 필드에 2D 인덱스를 생성합니다.
db.collationTest.createIndex( { loc: "2d" }, { collation: { locale: "simple" } } )
지원되는 쿼리
지리 공간적 인덱스는 쿼리를 처리할 수 없습니다.
샤드 키
지리 공간적 인덱스는 샤드 키로 사용할 수 없습니다. 그러나 다른 필드를 샤드 키로 사용하여 샤딩된 컬렉션에 지리 공간적 인덱스를 생성할 수 있습니다.
여러 지리 공간적 인덱스 $geoNear
컬렉션에 지리공간 인덱스가 여러 개 있는 경우 $geoNear 파이프라인 단계를 실행할 때 $geoNear key 옵션을 지정해야 합니다. key 옵션은 쿼리를 지원하는 데 사용할 인덱스를 지정합니다.
지원되는 데이터 유형
2dsphere 인덱스로 인덱싱된 필드에는 도형 데이터가 포함되어야 합니다. 도형 데이터는 다음 중 하나일 수 있습니다.
다음을 수행할 수 없습니다.
도형이 아닌 데이터가 있는 문서 를 2dsphere 인덱스 로 인덱싱된 필드 에 삽입합니다.
비형상 데이터가 포함된 필드에 2dsphere 인덱스를 빌드합니다.
인덱스 키의 수
2dsphere 인덱스를 생성하면 mongod는 GeoJSON 도형을 내부 표현에 매핑합니다. 결과적인 내부 표현은 큰 값 배열일 수 있습니다.
indexMaxNumGeneratedKeysPerDocument 설정은 메모리 부족 오류를 방지하기 위해 단일 문서에 대해 생성되는 최대 키 수를 제한합니다. 작업에 indexMaxNumGeneratedKeysPerDocument 매개 변수가 지정하는 것보다 더 많은 키가 필요한 경우 작업이 실패합니다.
기본적으로 서버는 문서당 인덱스 키를 최대 100,000개 허용합니다. 인덱스 키를 더 많이 허용하려면 indexMaxNumGeneratedKeysPerDocument 값을 높이세요.
평평한 표면에서의 정확한 일치
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 필드의 2d 인덱스는 다음 쿼리의 성능을 향상시키지 않습니다.
db.contacts.find( { address: [ 55.5, 42.3 ] } )
이 쿼리의 성능을 개선하려면 다음과 같이 address 필드에 오름차순 또는 내림차순 인덱스를 만듭니다.
db.contacts.createIndex( { address: 1 } )