데이터 정렬.
이 페이지의 내용
개요
이 가이드에서는 데이터 정렬 을 사용하여 문자열 값을 기준으로 찾기 또는 애그리게이션 작업 결과를 정렬하는 방법에 대해 설명합니다. 데이터 정렬은 특정 언어 및 국가 및 언어 설정에 해당하는 문자 순서 지정 규칙 세트입니다.
이 가이드에는 다음 섹션이 포함되어 있습니다.
MongoDB 데이터 정렬 은 MongoDB 가 기본값 데이터 정렬 및 사용자 지정 데이터 정렬에 따라 string 값을 정렬하는 방법을 설명합니다.
데이터 정렬 지정은
Collation
구조체 인스턴스 를 생성하는 방법을 설명합니다.컬렉션 에서 데이터 정렬 설정에서는 새 컬렉션에 대한 데이터 정렬을 설정하는 방법을 설명합니다.
인덱스 데이터 정렬 설정에서는 인덱스에 대한 인덱스 정렬을 설정하다 하는 방법을 설명합니다.
작업에서 데이터 정렬 설정 하기에서는 특정 CRUD 작업에 데이터 정렬을 적용하는 방법을 설명합니다.
추가 정보에서 이 가이드에 언급된 유형 및 메소드에 대한 리소스 및 API 문서 링크를 찾을 수 있습니다.
MongoDB 데이터 정렬
MongoDB는 기본적으로 바이너리 데이터 정렬 을 사용하여 문자열을 정렬합니다. 이 데이터 정렬 메서드는 ASCII 표준 문자 값을 사용하여 문자열을 비교하고 순서를 지정합니다. 특정 언어 및 국가 및 언어 설정에는 ASCII 표준과 다른 특정 문자 순서 규칙이 있습니다.
팁
ASCII 표준에 학습 보려면 ASCII Wikipedia 페이지를 참조하세요.
예를 들어, 캐나다 프랑스어에서는 다른 문자가 동일한 경우 가장 오른쪽에 악센트가 있는 문자가 문자열의 순서를 결정합니다. 다음 캐나다 프랑스어 단어를 고려하세요.
코트
coté
côte
côté
기본 바이너리 데이터 정렬을 사용할 때 MongoDB는 다음과 같은 순서로 단어를 정렬합니다.
cote coté côte côté
이 정렬 순서에서 ASCII 표준은 문자 "o"를 문자 "o" 앞에 배치하기 때문에 "coté"가 "cote" 앞에 배치됩니다.
캐나다 프랑스어 데이터 정렬을 사용할 때 MongoDB는 다음과 같은 순서로 단어를 정렬합니다.
cote côte coté côté
이 정렬 순서에서 캐나다 프랑스어 데이터 정렬 규칙은 문자 "e"를 문자 "é" 앞에 배치하기 때문에 "coté"가 "cote" 뒤에 배치됩니다.
데이터 정렬 지정
Collation
구조체 인스턴스에서 데이터 정렬 국가 및 언어 설정 및 기타 옵션을 지정하여 데이터 정렬을 정의할 수 있습니다. Collation
인스턴스 빌드를 시작하려면 Collation::builder()
메서드를 호출합니다.
참고
구조체 인스턴스화
Rust 운전자 는 Collation
을(를) 포함한 일부 구조체 유형 생성을 위한 빌더 디자인 패턴 을 구현합니다. builder()
메서드를 사용하여 옵션 빌더 메서드를 연결하여 각 유형의 인스턴스 를 구성할 수 있습니다.
다음 표에서는 Collation
인스턴스의 필드를 설정하는 데 사용할 수 있는 빌더 메서드에 대해 설명합니다. 유효한 Collation
구조체를 빌드하려면 locale()
메서드를 사용해야 하지만 다른 모든 빌더 메서드는 선택 사항입니다.
메서드 | Possible Values | 설명 |
---|---|---|
locale() (Required) | Specifies the ICU locale | |
strength() | CollationStrength::Primary , CollationStrength::Secondary , CollationStrength::Tertiary , CollationStrength::Quaternary , CollationStrength::Identical | 수행할 비교 수준을 지정합니다. |
case_level() | true , false | Specifies whether the driver performs case comparison |
case_first() | CollationCaseFirst::Upper , CollationCaseFirst::Lower , CollationCaseFirst::Off | 3차 수준 비교 시 대소문자 차이의 정렬 순서를 지정합니다. |
numeric_ordering() | true , false | Specifies whether the driver compares numeric strings as numbers |
alternate() | CollationAlternate::NonIgnorable ,
CollationAlternate::Shifted | 드라이버가 문자열 비교 중에 공백과 문장 부호를 기본 문자로 간주할지 여부를 지정합니다. |
max_variable() | CollationMaxVariable::Punct ,CollationMaxVariable::Space | Specifies which characters the driver ignores when alternate is set toCollationAlternate::Shifted |
normalization() | true , false | 드라이버가 문자열 값에 대해 텍스트 정규화를 수행할지 여부를 지정합니다. |
backwards() | true , false | Specifies whether the driver sorts strings containing diacritics in reverse character order |
예시
다음 예제에서는 Collation
인스턴스를 지정하고 국가 및 언어 설정을 "en_US"
로 설정합니다.
let collation = Collation::builder() .locale("en_US") .build();
collection에 데이터 정렬 설정
새 컬렉션 을 만들 때 해당 컬렉션 에서 호출되는 향후 작업에 대한 데이터 정렬을 정의할 수 있습니다. collation()
함수를 create_collection()
메서드에 연결하고 Collation
인스턴스 를 collation()
에 매개 변수로 전달하여 데이터 정렬을 설정합니다.
데이터 정렬 예제를 사용하여 Collection 만들기
이 예제에서는 또는 프랑스어 국가 및 언어 설정 규칙에 따라 데이터 정렬을 지정하고 collection 이라는 새 collection에 데이터 정렬을 "fr"
books
적용합니다. 분음 부호의 차이를 무시하기 위해 strength
필드가 CollationStrength::Primary
로 설정됩니다.
let collation = Collation::builder() .locale("fr") .strength(CollationStrength::Primary) .build(); let result = my_db.create_collection("books") .collation(collation) .await?;
데이터 정렬 순서 데모
books
컬렉션 에서 데이터 정렬을 지원하는 작업을 실행 하는 경우 이 작업은 앞의 데이터 정렬을 사용하여 컬렉션 만들기 예제에 지정된 데이터 정렬을 사용합니다.
books
컬렉션에 다음 문서가 포함되어 있다고 가정합니다.
{ "name" : "Emma", "length" : "474" } { "name" : "Les Misérables", "length": "1462" } { "name" : "Infinite Jest", "length" : "1104" } { "name" : "Cryptonomicon", "length" : "918" } { "name" : "Ça", "length" : "1138" }
팁
컬렉션 에 문서를 삽입하는 방법을 학습 보려면 문서 삽입 가이드 를 참조하세요.
다음 예제에서는 find()
메서드를 사용하여 name
필드 값이 알파벳순으로 "Infinite Jest"
앞에 오는 모든 문서를 반환합니다.
let query = doc! { "name": doc! { "$lt": "Infinite Jest" } }; let mut cursor = my_coll.find(query).await?; while let Some(doc) = cursor.try_next().await? { println!("{}", doc); }
{ "name": "Emma", "length": 474 } { "name": "Cryptonomicon", "length": 918 } { "name" : "Ça", "length" : "1138" }
collection에 대한 데이터 정렬을 지정하지 books
않으면 메서드는 find()
기본 이진 데이터 정렬 규칙에 따라 name
앞에 오는 값을 "Infinite Jest"
결정합니다. 이 규칙은 "I"로 시작하는 단어 뒤에 "Ç"로 시작하는 단어를 배치합니다. 따라서 앞의 찾기 작업이 이진 데이터 정렬 규칙을 따르는 경우 name
값이 "Ça"
인 문서는 필터 기준과 일치하지 않습니다.
인덱스에 데이터 정렬 설정
collection에 새 인덱스를 만들 때 인덱스에서 다루는 작업에 대한 데이터 정렬을 정의할 수 있습니다. 인덱스와 해당 데이터 정렬을 사용하는 작업을 실행하려면 작업과 인덱스에서 동일한 데이터 정렬을 지정해야 합니다.
팁
인덱스 및 포함된 쿼리에 대해 자세히 알아보려면 인덱스 가이드를 참조하세요.
함수로 인스턴스를 collation()
IndexOptions
빌드하고 인덱스 데이터 정렬을 설정합니다. 그런 다음 IndexOptions
를 IndexModel
빌더 함수에 인수로 전달하고 IndexModel
를 create_index()
메서드에 인수로 전달합니다.
예시
다음 예제에서는 create_index()
메서드를 사용하여 name
필드에 오름차순 인덱스를 만들고 "en_US"
국가 및 언어 설정에 해당하는 새 데이터 정렬을 지정합니다.
let collation = Collation::builder() .locale("en_US") .build(); let index_opts = IndexOptions::builder() .collation(collation) .build(); let index = IndexModel::builder() .keys(doc! { "name": 1 }) .options(index_opts) .build(); let result = my_coll.create_index(index).await?; println!("Created index: {}", result.index_name);
Created index: name_1
작업에 데이터 정렬 설정
collection에서 문서를 읽고, 업데이트하고, 삭제하는 작업에는 데이터 정렬을 사용할 수 있습니다. 작업에 데이터 정렬을 적용하면 collection 또는 인덱스에 대해 이전에 정의된 모든 데이터 정렬이 재정의됩니다.
인덱스의 데이터 정렬과 다른 작업에 데이터 정렬을 적용 하는 경우 해당 인덱스 를 사용할 수 없습니다. 따라서 작업이 인덱스 에 포함된 작업만큼 효율적으로 수행되지 않을 수 있습니다. 인덱스 에서 다루지 않는 정렬 작업의 단점에 대한 자세한 내용은 서버 매뉴얼에서 인덱스를 사용하여 쿼리 결과 정렬하기를 참조하세요.
예시
이 예에서는 다음 조치를 수행합니다.
numeric_ordering
데이터 정렬 옵션을true
로 설정하여 값이 알파벳 순서가 아닌 숫자 순서로 정렬되도록 합니다.find()
메서드를 사용하여length
필드의 값이"1000"
보다 큰 문서를 반환합니다.컬렉션의 데이터 정렬을 재정의하는
collation()
메서드를find()
메서드에 연결하여 데이터 정렬을 지정합니다.
let collation = Collation::builder() .locale("en_US") .numeric_ordering(true) .build(); let filter = doc! { "length": doc! { "$gt": "1000" } }; let mut cursor = my_coll.find(filter) .collation(collation) .await?; while let Some(result) = cursor.try_next().await? { println!("{}", result); };
{ "name" : "Les Misérables", "length": "1462" } { "name" : "Infinite Jest", "length" : "1104" } { "name" : "Ça", "length" : "1138" }
numeric_ordering
옵션을 true
로 설정하지 않고 이전 찾기 작업을 실행하는 경우, 드라이버는 length
값을 문자열로 비교하고 문자열 값 "1000"
을 값 "474"
및 "918"
앞에 정렬합니다. 이 경우 이전 찾기 작업은 books
컬렉션의 모든 문서를 반환합니다.
추가 정보
find()
메서드에 대해 자세히 알아보려면 데이터 조회 가이드를 참조하세요.
데이터 정렬에 대해 자세히 알아보려면 다음 서버 매뉴얼 페이지를 참조하세요.
API 문서
이 가이드에 언급된 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.