와일드카드 인덱스
MongoDB는 필드나 필드의 집합에 인덱스를 생성하여 쿼리 성능을 개선하는 것을 지원합니다. MongoDB는 유연한 스키마를 지원하므로 컬렉션 내에서 문서 필드 이름이 다를 수 있습니다. 와일드카드 인덱스를 사용하여 임의의 필드 또는 알 수 없는 필드에 대한 쿼리를 지원합니다.
와일드카드 인덱스를 만들려면 와일드카드 지정자($**
)를 인덱스 키로 사용합니다:
db.collection.createIndex( { "$**": <sortOrder> } )
다음 명령을 사용하여 와일드카드 인덱스를 만들 수 있습니다.
사용 사례
인덱스화하려는 필드를 알 수 없거나 변경될 수 있는 경우에만 와일드카드 인덱스를 사용하세요. 와일드카드 인덱스는 특정 필드에 대한 타깃 인덱스만큼 성능이 좋지 않습니다. 컬렉션에 타깃 인덱스를 방해하는 임의의 필드 이름이 포함된 경우,스키마를 리모델링하여 일관된 필드 이름을 지정하는 것이 좋습니다. 타깃 인덱스에 대해 자세히 알아보려면 쿼리를 지원하는 인덱스 만들기를 참조하세요.
다음 시나리오에서는 와일드카드 인덱스를 사용하는 것이 좋습니다.
애플리케이션이 문서마다 필드 이름이 다른 컬렉션을 쿼리하는 경우, 가능한 모든 문서 필드 이름에 대한 쿼리를 지원하는 와일드카드 인덱스를 만듭니다.
애플리케이션에서 하위 필드가 일관되지 않은 내장된 문서 필드에 대해 반복적으로 쿼리하는 경우, 모든 하위 필드에 대한 쿼리를 지원하기 위해 와일드카드 인덱스를 생성하는 것이 좋습니다.
애플리케이션이 공통 특성을 공유하는 문서를 쿼리하는 경우. 복합 와일드카드 인덱스는 공통 필드가 있는 문서에 대한 많은 쿼리를 효율적으로 처리할 수 있습니다. 자세한 내용은 복합 와일드카드 인덱스를 참조하십시오.
시작하기
와일드카드 인덱스를 사용하면 다음 작업을 수행할 수 있습니다.
세부 정보
와일드카드 인덱스는 다음과 같이 작동합니다.
컬렉션에 여러 개의 와일드카드 인덱스를 만들 수 있습니다.
와일드카드 인덱스는 컬렉션의 다른 인덱스와 동일한 필드를 포함할 수 있습니다.
와일드카드 인덱스는 기본적으로
_id
필드를 생략합니다. 와일드카드 인덱스에_id
필드를 포함하려면{ "_id" : 1 }
지정을 통해wildcardProjection
문서에 명시적으로 포함해야 합니다.와일드카드 인덱스는 희소 인덱스(sparse indexes) 로 분류되며, 인덱스된 필드가 있는 문서에 대한 항목만 포함합니다. 이는 인덱스 필드에 null 값이 포함되어 있더라도 마찬가지입니다.
와일드카드 인덱스는 와일드카드 텍스트 인덱스와 구별되며 호환되지 않습니다. 와일드카드 인덱스는
$text
연산자를 사용하는 쿼리를 지원할 수 없습니다.
지원되는 쿼리
와일드카드 인덱스는 다음 조건이 모두 참인 경우에만 해당 쿼리를 지원할 수 있습니다.
쿼리 플래너는 쿼리 조건자(query predicate)를 충족하기 위해 와일드카드 인덱스를 선택합니다.
쿼리 조건자는 와일드카드 인덱스가 적용되는 필드를 정확히 하나만 지정합니다.
쿼리 프로젝션은
_id
명시적으로 제외하고 쿼리 필드 만 포함합니다.지정된 쿼리 필드는 절대 배열이 아닙니다.
employees
collection에 다음과 같은 와일드카드 인덱스가 있다고 가정해 봅시다.
db.employees.createIndex( { "$**" : 1 } )
다음 작업은 단일 필드 lastName
에 대해 쿼리하고 결과 문서에서 다른 모든 필드를 프로젝트합니다.
db.employees.find( { "lastName" : "Doe" }, { "_id" : 0, "lastName" : 1 } )
지정된 lastName
필드가 배열이 아니라면, MongoDB는 $**
와일드카드 인덱스를 사용하여 해당 쿼리를 지원할 수 있습니다.
자세히 알아보기
와일드카드 인덱스에 대해 자세히 알아보려면 다음을 참조하세요: