문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

대소문자를 구분하지 않는 인덱스

이 페이지의 내용

  • 명령 구문
  • 행동
  • 예제
  • 대소문자를 구분하지 않는 인덱스 생성
  • 기본 데이터 정렬을 사용하는 컬렉션의 대소문자를 구분하지 않는 인덱스

대소문자를 구분하지 않는 인덱스는 대소문자를 구분하지 않고 문자열 비교를 수행하는 쿼리를 지원합니다. 대소문자 구분은 데이터 정렬에서 파생됩니다.

중요

collation 옵션을 지정하여 db.collection.createIndex()로 대소문자를 구분하지 않는 인덱스를 만들 수 있습니다.

db.collection.createIndex(
{
<field>: <sortOrder>
},
{
collation:
{
locale : <locale>,
strength : < 1 | 2 >
}
}
)

대소문자를 구분하지 않는 인덱스에 대한 대조를 지정하려면 collation 객체에 다음 필드를 포함합니다.

필드
설명
locale
언어 규칙을 지정합니다. 사용 가능한 국가 및 언어 설정 목록은 지원되는 국가 및 언어 설정을 참조하세요.
strength
비교 규칙을 결정합니다. strength 값이 1 또는 2이면 대소문자를 구분하지 않는 데이터 정렬을 나타냅니다.

추가 데이터 정렬 필드에 대해서는 데이터 정렬을참조하세요.

데이터 정렬을 지정하는 인덱스를 사용하려면, 쿼리 및 정렬 작업에서 인덱스와 동일한 데이터 정렬을 지정해야 합니다. 컬렉션에 데이터 정렬이 정의되어 있다면, 모든 쿼리와 인덱스는 다른 데이터 정렬을 명시적으로 지정하지 않는 한 해당 데이터 정렬을 상속합니다.

기본 데이터 정렬이 없는 컬렉션에서 대소문자를 구분하지 않는 인덱스를 사용하려면 데이터 정렬이 있는 인덱스를 만들고 strength 매개변수를 1 또는 2로 설정합니다(strength 매개변수에 대한 자세한 설명은 데이터 정렬 참조). 인덱스 수준 데이터 정렬을 사용하려면 쿼리 수준에서 동일한 데이터 정렬을 지정해야 합니다.

다음 예시에서는 기본 데이터 정렬이 없는 컬렉션을 만든 다음 대소문자를 구분하지 않는 데이터 정렬을 사용하여 type 필드에 인덱스를 추가합니다.

db.createCollection("fruit")
db.fruit.createIndex(
{ type: 1 },
{ collation: { locale: 'en', strength: 2 } }
)

인덱스를 사용하려면 쿼리에서 동일한 데이터 정렬을 지정해야 합니다.

db.fruit.insertMany( [
{ type: "apple" },
{ type: "Apple" },
{ type: "APPLE" }
] )
db.fruit.find( { type: "apple" } ) // does not use index, finds one result
db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 2 } )
// uses the index, finds three results
db.fruit.find( { type: "apple" } ).collation( { locale: 'en', strength: 1 } )
// does not use the index, finds three results

기본 데이터 정렬을 사용하여 컬렉션을 만들 경우, 다른 데이터 정렬을 지정하지 않는 한 이후에 생성하는 모든 인덱스가 해당 데이터 정렬을 상속합니다. 다른 데이터 정렬을 지정하지 않는 모든 쿼리도 기본 데이터 정렬을 상속합니다.

다음 예제에서는 names이라는 기본값 데이터 정렬을 사용하여 컬렉션을 만든 다음 first_name 필드에 인덱스를 만듭니다.

db.createCollection("names", { collation: { locale: 'en_US', strength: 2 } } )
db.names.createIndex( { first_name: 1 } ) // inherits the default collation

이름의 작은 컬렉션을 삽입합니다.

db.names.insertMany( [
{ first_name: "Betsy" },
{ first_name: "BETSY"},
{ first_name: "betsy"}
] )

이 컬렉션에 대한 쿼리는 기본적으로 지정된 데이터 정렬을 사용하며, 가능한 경우 인덱스도 사용합니다.

db.names.find( { first_name: "betsy" } )
// inherits the default collation: { collation: { locale: 'en_US', strength: 2 } }
// finds three results

위 작업은 컬렉션의 기본 데이터 정렬을 사용하고 세 문서를 모두 찾습니다. 더 나은 성능을 위해 first_name 필드의 인덱스를 사용합니다.

쿼리에 다른 데이터 정렬을 지정하여 이 컬렉션에서 대소문자를 구분하여 검색할 수도 있습니다.

db.names.find( { first_name: "betsy" } ).collation( { locale: 'en_US' } )
// does not use the collection's default collation, finds one result

위 작업은 strength 값이 지정되지 않은 데이터 정렬을 사용하기 때문에 하나의 문서만 찾습니다. 컬렉션의 기본 데이터 정렬이나 인덱스를 사용하지 않습니다.

← 부분 인덱스