데이터 정렬을 이용하여 문자열 비교를 위한 언어별 규칙(예: 대소문자 및 악센트 표기 규칙)을 지정할 수 있습니다.
컬렉션이나 뷰, 인덱스 또는 데이터 정렬을 지원하는 특정 작업에 데이터 정렬을 지정할 수 있습니다.
MongoDB Atlas UI에서 문서를 쿼리할 때 데이터 정렬을 지정하려면 데이터 정렬 지정을 참조하세요.
데이터 대조 문서
데이터 정렬 문서에는 다음과 같은 필드가 있습니다.
{    locale: <string>,    caseLevel: <boolean>,    caseFirst: <string>,    strength: <int>,    numericOrdering: <boolean>,    alternate: <string>,    maxVariable: <string>,    backwards: <boolean> } 
데이터 정렬을 지정할 때 locale 필드는 필수이고, 다른 데이터 정렬 필드는 모두 선택 사항입니다. 필드에 대한 설명은 데이터 정렬 문서를 참조하세요.
기본 데이터 정렬 매개변수 값은 지정하는 국가 및 언어 설정에 따라 달라집니다. 기본 데이터 정렬 매개변수와 해당 매개변수와 연결된 국가 및 언어 설정 목록은 데이터 정렬 기본 매개변수를 참조하세요.
| 필드 | 유형 | 설명 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 
 | 문자열 | ICU 국가 및 언어 설정. 지원되는 국가 및 언어 설정 목록은 지원되는 국가 및 언어 설정을 참조하십시오. 단순 이진 비교를 지정하려면  | ||||||||||||
| 
 | integer | 선택 사항. 수행할 비교 수준입니다. ICU 비교 수준에 해당합니다. 가능한 값은 다음과 같습니다. 
 자세한 내용은 ICU 데이터 정렬: 비교 수준 항목을 참조하세요. | ||||||||||||
| 
 | 부울 | 선택 사항입니다.  
 
 
 자세한 내용은 ICU 데이터 정렬: 사례 수준을 참조하십시오. | ||||||||||||
| 
 | 문자열 | 선택 사항. 3차 수준 비교 시 대소문자 차이의 정렬 순서를 결정하는 필드입니다. 가능한 값은 다음과 같습니다. 
 | ||||||||||||
| 
 | 부울 | 선택 사항. 숫자 문자열을 숫자로 비교할지, 아니면 문자열로 비교할지를 결정하는 플래그입니다. 
 
 기본값은  | ||||||||||||
| 
 | 문자열 | 선택 사항. 비교를 위해 데이터 정렬에서 공백과 문장 부호를 기본 문자로 고려할지 여부를 결정하는 필드입니다. 가능한 값은 다음과 같습니다. 
 자세한 내용은 ICU 데이터 정렬: 비교 수준 항목을 참조하세요. 기본값은  | ||||||||||||
| 
 | 문자열 | 선택 사항.  가능한 값은 다음과 같습니다. 
 | ||||||||||||
| 
 | 부울 | 선택 사항. 일부 프랑스어 사전 순서와 같이 분음 부호가 있는 문자열을 문자열 뒤쪽부터 정렬할지 여부를 결정하는 플래그입니다. 
 
 기본값은  | ||||||||||||
| 
 | 부울 | 선택 사항. 텍스트에 정규화가 필요한지 확인하고 정규화를 수행할지 여부를 결정하는 플래그입니다. 일반적으로 대부분의 텍스트에는 이러한 정규화 처리가 필요하지 않습니다. 
 
 기본값은  자세한 내용은 https://unicode-org.github.io/icu/userguide/collation/concepts.html#normalization을 참조하세요. | 
데이터 정렬을 지원하는 작업
다음 작업에 대해 데이터 정렬을 지정할 수 있습니다.
참고
한 연산에 대해 여러 데이터 정렬을 지정할 수 없습니다. 예를 들어 필드별로 서로 다른 데이터 정렬을 지정할 수 없으며 정렬과 함께 찾기를 수행하는 경우 찾기 와 정렬에서 각각 다른 데이터 정렬을 사용하는 것은 허용되지 않습니다.
| 명령. | mongosh방법 | 
|---|---|
| 
 | |
| 
 | 
| [1] | (1, 2) 일부 인덱스 유형은 데이터 정렬을 지원하지 않습니다. 자세한 내용은 데이터 정렬 및 지원되지 않는 인덱스 유형을 참조하세요. | 
행동
로컬 변형
일부 데이터 정렬 국가 및 언어 설정에는 특수한 언어별 규칙을 사용하는 변형이 있습니다. 국가 및 언어 설정 변형을 지정하려면 다음 구문을 사용하세요.
{ "locale" : "<locale code>@collation=<variant>" } 
예를 들어 중국어 데이터 정렬의 unihan변형을 사용하려면 다음을 사용하세요.
{ "locale" : "zh@collation=unihan" } 
모든 데이터 정렬 국가 및 언어 설정과 그 변형에 대한 전체 목록은 데이터 정렬 국가 및 언어 설정을 참조하세요.
데이터 정렬 및 뷰
- 뷰를 만들 때 뷰의 기본 데이터 정렬 지정할 수 있습니다. 데이터 정렬이 지정되지 않은 경우, 뷰의 기본 데이터 정렬은 "simple" 이진 비교 데이터 정렬기입니다. 즉, 뷰는 컬렉션의 기본 데이터 정렬을 상속하지 않습니다. 
- 뷰의 문자열 비교에서는 뷰의 기본 데이터 정렬을 사용합니다. 뷰의 기본 데이터 정렬을 변경하거나 재정의하려는 작업은 오류를 반환하며 실패합니다. 
- 다른 보기에서 보기를 만드는 경우 원본 보기의 데이터 정렬과 다른 데이터 정렬을 지정할 수 없습니다. 
- $lookup또는- $graphLookup등 여러 뷰가 포함된 집계를 수행하는 경우 뷰의 데이터 정렬이 동일해야 합니다.
데이터 정렬 및 인덱스 사용
문자열 비교에 인덱스를 사용하려면 작업에서 동일한 데이터 정렬도 지정해야 합니다. 즉, 작업에서 다른 데이터 정렬을 지정하는 경우 데이터 정렬이 있는 인덱스는 인덱싱된 필드에서 문자열 비교를 수행하는 작업을 지원할 수 없습니다.
경고
데이터 정렬로 구성된 인덱스는 ICU 데이터 정렬 키를 사용하여 정렬 순서를 지정하므로, 데이터 정렬이 없는 인덱스의 경우 데이터 정렬 인식 인덱스 키가 인덱스 키보다 클 수 있습니다.
다음 문서가 포함된 restaurants collection입니다:
db.restaurants.insertMany( [    { _id: 1, category: "café", status: "Open" },    { _id: 2, category: "cafe", status: "open" },    { _id: 3, category: "cafE", status: "open" } ] ) 
restaurants 컬렉션 데이터 정렬 국가 및 언어 설정 "fr"인 문자열 필드 category 에 대한 인덱스 가 있습니다.
db.restaurants.createIndex( { category: 1 }, { collation: { locale: "fr" } } ) 
인덱스 와 동일한 데이터 정렬을 지정하는 다음 쿼리 인덱스 사용할 수 있습니다.
db.restaurants.find( { category: "cafe" } ).collation( { locale: "fr" } ) 
하지만 기본적으로 '단순' 바이너리 데이터 정렬기를 사용하는 다음 쿼리 작업에서는 인덱스를 사용할 수 없습니다.
db.restaurants.find( { category: "cafe" } ) 
인덱스 접두사 키가 문자열, 배열 및 내장된 문서가 아닌 복합 인덱스의 경우, 다른 데이터 정렬을 지정하는 작업에서도 인덱스를 사용하여 인덱스 접두사 키에 대한 비교를 지원할 수 있습니다.
예를 들어, 컬렉션 restaurants에는 숫자 필드 score 및 price와 문자열 필드 category에 복합 인덱스가 있습니다. 인덱스는 문자열 비교를 위해 데이터 정렬 국가 및 언어 설정 "fr"을 사용하여 만들어집니다.
db.restaurants.createIndex(    { score: 1, price: 1, category: 1 },    { collation: { locale: "fr" } } ) 
문자열 비교에 "simple" 이진 데이터 정렬을 사용하는 다음 작업에서는 인덱스를 사용할 수 있습니다.
db.restaurants.find( { score: 5 } ).sort( { price: 1 } ) db.restaurants.find( { score: 5, price: { $gt: Decimal128( "10" ) } } ).sort( { price: 1 } ) 
색인이 생성된 category 필드의 문자열 비교를 위해 "simple" 이진 데이터 정렬을 사용하는 다음 작업은 색인을 사용하여 쿼리의 score: 5 부분만 수행할 수 있습니다.
db.restaurants.find( { score: 5, category: "cafe" } ) 
쿼리 인덱스 사용했는지 확인하려면 explain() 옵션을 사용하여 쿼리 실행 .
중요
내장된 문서 키를 포함한 내장된 문서 키와의 일치는 단순 이진 비교를 사용합니다. 즉, 'type.cafe'와 같은 키에 대한 쿼리 'type.cafe' 키와 일치하지 않습니다. 강도 매개변수 에 설정하다 값에 관계없이
데이터 정렬 및 지원되지 않는 인덱스 유형
다음 인덱스는 단순 바이너리 비교만 지원하며 데이터 정렬은 지원하지 않습니다.
팁
단순 데이터 정렬이 아닌 컬렉션에 text 또는 2d 인덱스를 만들려면 인덱스를 만들 때 {collation:
{locale: "simple"} }를 명시적으로 지정해야 합니다.
제한 사항
numericOrdering
numericOrdering을 true로 지정하면 다음과 같은 제한 사항이 적용됩니다.
- 비교에서는 연속된 음수가 아닌 정수 부분 문자열만 고려됩니다. - numericOrdering다음은 지원하지 않습니다.- +
- -
- 소수점 및 소수 쉼표와 같은 소수점 구분 기호 
- 지수 
 
- 숫자 또는 십진수(Nd) 범주의 유니코드 코드 포인트만 숫자로 처리됩니다. 
- 숫자 길이가 254자를 초과하는 경우 초과 문자는 별도의 숫자로 처리됩니다. 
다음과 같은 문자열 번호와 십진수 값을 가진 컬렉션을 고해 보겠습니다.
db.c.insertMany(   [       { "n" : "1" },       { "n" : "2" },       { "n" : "2.1" },       { "n" : "-2.1" },       { "n" : "2.2" },       { "n" : "2.10" },       { "n" : "2.20" },       { "n" : "-10" },       { "n" : "10" },       { "n" : "20" },       { "n" : "20.1" }   ] ) 
다음 find 쿼리는 numericOrdering 매개변수가 포함된 데이터 정렬 문서를 사용합니다.
db.c.find(    { }, { _id: 0 } ).sort(   { n: 1 } ).collation( {   locale: 'en_US',   numericOrdering: true } ) 
이 연산은 다음과 같은 결과를 반환합니다.
[     { n: '-2.1' },     { n: '-10' },     { n: '1' },     { n: '2' },     { n: '2.1' },     { n: '2.2' },     { n: '2.10' },     { n: '2.20' },     { n: '10' },     { n: '20' },     { n: '20.1' } ] 
- numericOrdering: true문자열 값을 숫자 값인 것처럼 오름차순으로 정렬합니다.
- 두 개의 음수 값 - -2.1및- -10은 지원되지 않는- -문자가 있기 때문에 예상된 정렬 순서로 정렬되지 않습니다.
- numericOrdering매개변수가 소수 값을 지원하지 않기 때문에- 2.2값은- 2.10값보다 먼저 정렬됩니다.
- 결과적으로 - 2.2및- 2.10은 사전 순으로 정렬됩니다.
예시
다음 문서가 포함된 restaurants collection입니다:
db.restaurants.insertMany( [    { _id: 1, category: "café", status: "Open" },    { _id: 2, category: "cafe", status: "open" },    { _id: 3, category: "cafE", status: "open" } ] ) 
다음 find() 작업은 데이터 정렬을 사용합니다.
db.restaurants.find(    { category: "cafe", status: "Open" } ).collation( { locale: "fr", strength: 1 } ) 
[    { _id: 1, category: 'café', status: 'Open' },    { _id: 2, category: 'cafe', status: 'open' },    { _id: 3, category: 'cafE', status: 'open' } ] 
이 필터하다 strength: 1(으)로 데이터 정렬을 지정하므로 쿼리 에서 대소문자 변형과 문자 변형 간의 차이를 무시합니다. 따라서 필터하다 에 지정된 대소문자 및 문자 변형과 정확히 일치하는 문서 없더라도 이 작업은 컬렉션 의 모든 문서를 반환합니다.