비교/순서 정렬
정렬 작업에서 서로 다른 BSON types의 값을 비교할 때 MongoDB는 가장 낮은 것부터 가장 높은 것까지 다음과 같은 비교 순서를 사용합니다.
MinKey(내부 유형)
Null
숫자(정수, long, double, decimals)
기호, 문자열
객체
배열
BinData
ObjectId
부울
날짜
타임스탬프
정규 표현식
JavaScript 코드
MaxKey(내부 유형)
참고
숫자 유형
MongoDB는 비교 목적으로 일부 유형을 동등한 유형으로 취급합니다. 인스턴스, 숫자 유형은 비교 전에 변환 과정을 거칩니다.
문자열
이진 비교
기본적으로 MongoDB는 단순 이진 비교를 사용하여 문자열을 비교합니다.
데이터 정렬
버전 3.4에 새로 추가되었습니다.
데이터 정렬을 사용하면 대소문자 및 악센트 표시 규칙과 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다.
데이터 정렬 사양의 구문은 다음과 같습니다:
{ locale: <string>, caseLevel: <boolean>, caseFirst: <string>, strength: <int>, numericOrdering: <boolean>, alternate: <string>, maxVariable: <string>, backwards: <boolean> }
데이터 정렬을 지정할 때 locale
필드는 필수이고, 다른 데이터 정렬 필드는 모두 선택 사항입니다. 필드에 대한 설명은 데이터 정렬 문서를 참조하세요.
컬렉션 또는 연산에 대한 데이터 정렬이 지정되지 않은 경우, MongoDB는 이전 버전에서 문자열 비교에 사용된 간단한 이진 비교를 사용합니다.
배열
배열 비교에서
오름차순 정렬은 BSON 유형 정렬 순서에 따라 배열 의 가장 작은 요소를 비교합니다.
내림차순 정렬은 역 BSON 유형 정렬 순서에 따라 배열 의 가장 큰 요소를 비교합니다.
값이 한 요소 배열 ( 예시 :
[ 1 ]
)인 필드를 배열이 아닌 필드 ( 예시:2
)와 비교할 때 비교는1
및2
에 대한 것입니다.빈 배열 ( 예시:
[ ]
)을 비교하면 빈 배열 이null
값보다 작거나 누락된 필드 값으로 간주됩니다.중첩된 배열 의 비교( 예시 :
[[1, 2], [3, 4]]
)는 가장 바깥쪽 배열 이후의 모든 배열 을 사전순으로 비교합니다.
참고
비교 쿼리 연산자는 쿼리 가 배열 인 경우 유형 괄호를 시행하다 합니다. 인덱싱된 값이 배열 인 경우 연산자 는 인덱싱된 배열 에 대해 요소별로 유형별 괄호 비교를 수행합니다.
객체
MongoDB의 BSON 객체 비교는 다음 순서를 사용합니다:
BSON 객체 내에 나타나는 순서대로 키-값 쌍을 재귀적으로 비교합니다.
필드 유형을 비교합니다. MongoDB는 필드 유형에 대해 가장 낮은 것부터 가장 높은 것까지 다음과 같은 비교 순서를 사용합니다:
MinKey(내부 유형)
Null
숫자(정수, long, double, decimals)
기호, 문자열
객체
배열
BinData
ObjectId
부울
날짜
타임스탬프
정규 표현식
JavaScript 코드
MaxKey(내부 유형)
필드 유형이 동일한 경우 키 필드 이름을 비교합니다.
키 필드 이름이 같으면 필드 값을 비교합니다.
필드 값이 같으면 다음 키/값 쌍을 비교합니다(1단계로 돌아갑니다). 더 많은 쌍이 없는 객체는 더 많은 쌍이 있는 객체보다 작습니다.
날짜 및 타임스탬프
날짜 객체는 타임스탬프 객체보다 먼저 정렬됩니다.
Non-existent Fields
비교는 존재하지 않는 필드 를 null로 취급합니다. 문서 { }
및 { a: null }
의 a
필드 에 대한 정렬은 문서를 정렬 순서에서 동일한 것으로 처리합니다.
BinData
MongoDB가 BinData
를 다음 순서로 정렬합니다.
첫째, 데이터의 길이 또는 크기입니다.
그런 다음 BSON 1바이트 하위 유형을 기준으로 합니다.
마지막으로 데이터를 기준으로 부호 없는 바이트에서 바이트 단위로 비교를 수행합니다.