정의
호환성
다음 환경에서 호스팅되는 배포에 $convert 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
버전 8.3에서 변경되었습니다.
{ $convert: { input: <expression>, to: <type expression> || { type: <type expression>, subtype: <int> }, base: <expression>, // new in 8.3 format: <string>, onError: <expression>, onNull: <expression> } }
$convert 은 다음 필드가 있는 문서를 가져옵니다.
필드 | 필요성 | 설명 |
|---|---|---|
| 필수 사항 | 인수는 유효한 표현식 이면 무엇이든 될 수 있습니다. 표현식에 대한 자세한 내용은 표현식을 참조하세요 . MongoDB 8.1부터는
MongoDB 8.3부터는 MongoDB 값을 |
| 필수 사항 |
|
|
| |
| 옵션 |
|
| 옵션 |
|
| 옵션 | 문자열과 숫자 유형 간의 변환을 위한 정수입니다.
버전 8.3에 추가 되었습니다. |
|
|
|
| 옵션 | 변환 중 오류가 발생했을 때 반환할 값입니다. 여기에는 지원되지 않는 유형 변환이 포함됩니다. 인수는 유효한 모든 표현식일 수 있습니다. 지정하지 않으면 오류 발생 시 작업에 오류가 발생하고 중지됩니다. |
| 옵션 |
$convert 이외에도 MongoDB는 기본 'onError'와 'onNull' 동작이 허용되는 경우 다음과 같은 집계 연산자를 축약형으로 제공합니다.
유형 식별자
to.type 필드는 다음 숫자 및 string 식별자를 허용합니다.
문자열 식별자 | 숫자 식별자 | 참고 사항 |
|---|---|---|
"double" | 1 | 참조: double로 변환. |
"문자열" | 2 | string 변환을 참조하십시오. |
"객체" | 3 | 객체로 변환을 참조하세요. |
"배열" | 4 | 배열로 변환을 참조하세요. |
"binData" | 5 | 참조: BinData로 변환. |
"objectId" | 7 | ObjectId로 변환을 참조하세요. |
"bool" | 8 | 불리언으로 변환을 참조하세요. |
'날짜' | 9 | 날짜로 변환을 참조하세요. |
"in" | 16 | 정수로 변환을 참조하세요. |
"long" | 18 | 길게 변환을 참조하십시오. |
"십진수" | 19 | 10진수로 변환을 참조하세요. |
바이너리 하위 유형
다음 표에는 to.subtype 필드에 대한 유효한 값이 나열되어 있습니다.
번호 | 설명 |
|---|---|
0 | 일반 바이너리 하위 유형 |
1 | 함수 데이터 |
2 | 바이너리(이전) |
3 | UUID(이전) |
4 | UUID |
5 | MD5 |
6 | 암호화된 BSON 값 |
7 | 압축된 Time Series 데이터 버전 5.2에 추가되었습니다. |
8 | 키나 시크릿과 같은 민감한 데이터. MongoDB는 하위 유형이 8인 바이너리 데이터에 대한 리터럴 값을 기록하지 않습니다. 대신 자리 표시자 값 |
9 | 벡터 데이터는 동일한 유형의 숫자가 밀집되어 있는 배열입니다. |
128 | 사용자 지정 데이터 |
행동
다음 섹션에서는 값을 다른 유형으로 변환하는 방법을 설명합니다.
BinData로 변환
MongoDB 8.1부터는 input 필드 다음 유형 중 하나로 설정하다 하면 to 필드 binData 로 설정하다 수 있습니다.
intlongdouble
MongoDB 8.1부터 $convert 는 서로 다른 binData 하위 유형 간에 변환을 시도할 때 오류를 반환합니다. MongoDB 8.0에서 $convert 는 원래 값과 원래 하위 유형을 반환합니다: 변환이 수행되지 않습니다. 8.0 이전의 MongoDB 버전에는 binData 변환 기능이 없습니다.
숫자 유형에서 binData(으)로 변환합니다.
숫자 유형을 binData로 변환하는 경우:
int은(는) 4바이트binData이(가) 됩니다.long은(는) 8바이트binData이(가) 됩니다.double은(는) 8바이트binData이(가) 됩니다.
숫자 출력의 byteOrder 기본값은 "little", 즉 가장 덜 중요한 바이트를 먼저 배치합니다. 반대로 'big'은 최상위 바이트를 먼저 배치합니다.
long 을 binData로 변환합니다:
입력:
db.t.insertOne( { a: Long(42) } )
db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, } } ])
출력:
[ { convertedBD: Binary.createFromBase64('KgAAAAAAAAA=', 0) } ]
빅 엔디안 바이트 순서를 사용하여 long 를 binData 로 변환합니다.
입력:
db.t.insertOne( { a: Long(42) } )
db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", byteOrder: "big", } }, } } ])
출력:
[ { convertedBD: Binary.createFromBase64('AAAAAAAAACo=', 0), } ]
double 을 binData로 변환합니다:
입력:
db.t.insertOne( { a: Double(42.0) } )
db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, } } ])
출력:
[ { convertedBD: Binary.createFromBase64('AAAAAAAARUA=', 0) } ]
int 을 binData로 변환합니다:
입력:
db.t.insertOne( { a: 42 } )
db.t.aggregate([ { $project: { _id: 0, convertedBD: { $convert: { input: "$a", to: "binData", } }, } } ])
출력:
[ { convertedBD: Binary.createFromBase64('KgAAAA==', 0) } ]
숫자 값 배열 binData로 변환합니다.
이 예시 $convert 이(가) 서로 다른 유형의 숫자 값이 포함된 배열을 binData(으)로 변환하는 방법을 보여 줍니다.
입력:
db.t.insertMany([ // Empty array { a: [ ] }, // Bool array { a: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ] }, // Int array { a: [NumberInt(0), NumberInt(1), NumberInt(0), NumberInt(10)] }, // Double array { a: [ Double(0.0), Double(1.0), Double(0.0), Double(1.0), Double(3.14) ] }, ])
db.t.aggregate([ { $project: { _id: 0, original: "$a", convertedVector: { $convert: { input: "$a", to: { type: "binData" } } } } } ])
출력:
[ { original: [], convertedVector: Binary.fromPackedBits(new Uint8Array([])) }, { original: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ], convertedVector: Binary.fromPackedBits(new Uint8Array([ 127, 7 ])) }, { original: [ 0, 1, 0, 10 ], convertedVector: Binary.fromInt8Array(new Int8Array([ 0, 1, 0, 10 ])) }, { original: [ 0, 1, 0, 1, 3.14 ], convertedVector: Binary.fromFloat32Array(new Float32Array([ 0, 1, 0, 1, 3.140000104904175 ])) } ]
문자열에서 BinData로 변환
MongoDB binData 와 문자열 간의 변환도 지원합니다.
다음 예제에서는 문자열을 binData로 변환하는 방법을 보여 줍니다.
예시 | 결과 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| |
참고
MongoDB 8.1부터 $convert 는 서로 다른 binData 하위 유형 간에 변환을 시도할 때 오류를 반환합니다. MongoDB 8.0에서 $convert 는 원래 값과 원래 하위 유형을 반환합니다: 변환이 수행되지 않습니다. 8.0 이전의 MongoDB 버전에는 binData 변환 기능이 없습니다.
배열로 변환
버전 8.3에 추가 되었습니다.
다음 표에는 배열 로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
BinData | 숫자 값의 배열 반환합니다. 배열 요소의 숫자 유형은 binData 형식에 따라 달라집니다. |
문자열 | string 내의 내용에 해당하는 배열 반환합니다. The string must contain characters that represent a valid JSON 배열. |
Null 또는 누락 | null을 반환합니다. |
다음 표에는 문자열을 배열 로 변환하는 몇 가지 예가 나와 있습니다.
예시 | 결과 | ||
|---|---|---|---|
| [ 1, 2, 3 ] | ||
| [ 'a', 'b', 'c' ] | ||
| [ ] | ||
| 오류: 입력이 예상 유형 ' 배열'과 일치하지 않습니다. | ||
| 오류: onError 값이 없는 $convert에서 int에서 배열 로의 변환이 지원되지 않습니다. | ||
| 오류: 입력이 유효한 JSON 나타내지 않음: 예기치 않은 독립형 값 | ||
| [ { '$oid': '507f1f77bcf86cd799439011' } ] | ||
| [ 1, 2, 3 ] | ||
| 'on error!' | ||
| 'on null!' |
binData를 배열로 변환
이 예시 $convert 이(가) 서로 다른 형식의 binData 을(를) 해당 유형의 값이 포함된 배열로 변환하는 방법을 보여 줍니다.
input:
db.t.insertMany([ // Empty PACKED_BIT vector converts to empty array { v: BinData(9, "EAA=") }, // PACKED_BIT vector converts to bool array { v: BinData(9, "EAB/Bw==") }, // INT8 vector converts to int array { v: BinData(9, "AwAAAQ==") }, // FLOAT32 vector converts to double array { v: BinData(9, "JwCamZk+") }, // FLOAT32 vector with special values converts to [-Infinity, 0, Infinity] { v: BinData(9, "JwAAAID/AAAAAAAAgH8=") } ])
db.t.aggregate([ { $project: { _id: 0, original: "$v", asArray: { $convert: { input: "$v", to: { type: "array" } } } } } ])
출력:
[ { original: Binary.fromPackedBits(new Uint8Array([])), asArray: [] }, { original: Binary.fromPackedBits(new Uint8Array([ 127, 7 ])), asArray: [ false, true, true, true, true, true, true, true, false, false, false, false, false, true, true, true ] }, { original: Binary.fromInt8Array(new Int8Array([ 0, 1 ])), asArray: [ 0, 1 ] }, { original: Binary.fromFloat32Array(new Float32Array([ 0.30000001192092896 ])), asArray: [ 0.30000001192092896 ] }, { original: Binary.fromFloat32Array(new Float32Array([ -Infinity, 0, Infinity ])), asArray: [ -Infinity, 0, Infinity ] } ]
객체로 변환
버전 8.3에 추가 되었습니다.
다음 표에는 input 로 변환할 수 있는 객체 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
문자열 | string 내의 내용에 해당하는 document를 반환합니다. 문자열에는 유효한 JSON 객체 나타내는 문자가 포함되어야 합니다. |
Null 또는 누락 | null을 반환합니다. |
다음 표에는 객체 로 변환하는 몇 가지 예가 나와 있습니다.
예시 | 결과 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| { a: 1, b: 2 } | ||||||||
| { } | ||||||||
| 오류: 입력이 예상 유형 ' 객체'와 일치하지 않습니다. | ||||||||
| 오류: 입력이 유효한 JSON 나타내지 않음: 예기치 않은 독립형 값 | ||||||||
| 오류: 입력이 유효한 JSON 나타내지 않음: 잘못 포함된 null 바이트 | ||||||||
| { name: 'fox00o' } | ||||||||
| { a: 3, b: 2 } | ||||||||
| { foo: null } | ||||||||
| { foo: false } | ||||||||
| { ['__proto__']: { foo: null } } | ||||||||
| { foo: 'NaN' } | ||||||||
| { foo: 123 } | ||||||||
| { foo: Long('4294967296') } | ||||||||
| { foo: 1.123123 } | ||||||||
| { foo: 1200 } | ||||||||
| { largePos: 18446744073709552000 } | ||||||||
| { largeNeg: -18446744073709552000 } | ||||||||
| null | ||||||||
| { objectId: '507f1f77bcf86cd799439011', uuid: '3b241101-e2bb-4255-8caf-4136c566a962', date: '2018-03-27T16:58:51.538Z', regex: '/^ABC/i', js: 'function (s) {return s + "foo";}', timestamp: 'Timestamp(1565545664, 1)', arr: [ 1, 2, 3 ] } |
부울로 변환
다음 표에는 더블로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
배열 | true를 반환합니다 |
이진 데이터 | true를 반환합니다 |
부울 | 아니요. 부울 값을 반환합니다. |
코드 | true를 반환합니다 |
날짜 | true를 반환합니다 |
10진수 | Returns true if not zero Return false if zero |
Double | Returns true if not zero Return false if zero |
Integer | Returns true if not zero Return false if zero |
JavaScript | true를 반환합니다 |
Long | Returns true if not zero Return false if zero |
최대 키 | true를 반환합니다 |
최소 키 | true를 반환합니다 |
Null |
|
객체 | true를 반환합니다 |
ObjectId | true를 반환합니다 |
정규 표현식 | true를 반환합니다 |
문자열 | true를 반환합니다 |
타임스탬프 | true를 반환합니다 |
MongoDB의 데이터 유형에 대해 자세히 알아보려면 BSON types를 참조하세요.
다음 표에는 더블로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||
|---|---|---|---|---|---|
| true | ||||
| 거짓 | ||||
| true | ||||
| true | ||||
| 거짓 | ||||
| true | ||||
| true | ||||
| true | ||||
| true | ||||
| true | ||||
| null |
정수로 변환
다음 표에는 정수로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 | Returns 0 for false.Returns 1 for true. |
BinData |
|
Double | 잘린 값을 반환합니다. 잘린 double 값은 정수의 최소값과 최대값 내에 속해야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 double 값은 변환할 수 없습니다. |
10진수 | 잘린 값을 반환합니다. 잘린 10진수 값은 정수의 허용 범위 내에 있어야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 소숫값은 변환할 수 없습니다. |
Integer | 아니요. 정수 값을 반환합니다. |
Long | 긴 값을 정수로 반환합니다. long 값은 정수의 최소값과 최대값 내에 있어야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 Long 값은 변환할 수 없습니다. |
문자열 | 문자열의 숫자 값을 정수로 반환합니다. If you omit
|
다음 표에는 정수로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | |||||
|---|---|---|---|---|---|---|
| 1 | |||||
| 0 | |||||
| 1 | |||||
| 5 | |||||
| 오류 | |||||
| 5000 | |||||
| 오류 | |||||
| -2 | |||||
| 오류 | |||||
| null | |||||
| 1048576 | |||||
| -1763180545 | |||||
| 오류: 잘못된 길이로 인해 BinData를 변환하지 못했습니다: 7 |
10진수로 변환
다음 표에는 10진수로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 | Returns Decimal128( "0" ) for false.Returns Decimal128( "1" ) for true. |
Double | double 값을 10진수로 반환합니다. |
10진수 | 아니요. 소수를 반환합니다. |
Integer | int 값을 10진수로 반환합니다. |
Long | Long 값을 10진수로 반환합니다. |
문자열 | 문자열의 숫자 값을 10진수로 반환합니다.
|
날짜 | 날짜 값에 해당하는 epoch 이후의 밀리초 수를 반환합니다. |
다음 표에는 10진수로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||
|---|---|---|---|---|---|
| Decimal128("1") | ||||
| Decimal128("0") | ||||
| Decimal128( "2.50000000000000" ) | ||||
| Decimal128("5") | ||||
| Decimal128("10000") | ||||
| Decimal128("-5.5") | ||||
| Decimal128("1522039108044") |
double로 변환
다음 표에는 double로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 | Returns NumberDouble(0) for false.Returns NumberDouble(1) for true. |
BinData |
|
Double | 아니요. double 값을 반환합니다. |
10진수 | 10진수 값을 double로 반환합니다. 10진수 값은 double의 최소값과 최대값 내에 속해야 합니다. 값이 최소 double 값보다 작거나 최대 double 값보다 큰 10진수 값은 변환할 수 없습니다. |
Integer | int 값을 double로 반환합니다. |
Long | 긴 값을 double로 반환합니다. |
문자열 | 문자열의 숫자 값을 double로 반환합니다.
|
날짜 | 날짜 값에 해당하는 epoch 이후의 밀리초 수를 반환합니다. |
다음 표에는 double로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | |||||
|---|---|---|---|---|---|---|
| 1 | |||||
| 0 | |||||
| 2.5 | |||||
| 5 | |||||
| 10000 | |||||
| -5.5 | |||||
| 50000000000 | |||||
| 1522039108044 | |||||
| 4.814824932714571e-36 | |||||
| 오류: 잘못된 길이로 인해 binData를 변환하지 못했습니다: 2 |
비정규 숫자
MongoDB 8.3부터 서버 표현 가능한 모든 double 정밀도 부동 점 숫자의 전체 범위 구문 분석할 수 있습니다. 여기에는 최상위 숫자 앞에 0이 있고 지수가 가능한 가장 작은 값을 갖는 비정규 숫자 가 포함됩니다. 자세한 내용은 비정규 숫자를 참조하세요.
이전 버전의 MongoDB 에서는 이러한 숫자를 구문 분석하려고 하면 서버 오류를 반환합니다. 다음 예시 에서는 MongoDB 8.3 이전 버전에서 오류를 발생시킵니다.
db.t.insertOne( { v: "7.08263e-317" } ) db.t.aggregate([ { $project: { converted: { $convert: { input: "$v", to: "double" }, } } } ])
이 예시 다음과 유사한 오류로 인해 실패합니다.
MongoServerError[ConversionFailure]: Executor error during aggregate command on namespace: test.t :: caused by :: Failed to parse number '7.08263e-317' in $convert with no onError value: Out of range
길게 변환
다음 표에는 로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 | Returns 0 for false.Returns 1 for true. |
BinData |
|
Double | 잘린 값을 반환합니다. 잘린 double 값은 정수의 최소값과 최대값 내에 속해야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 double 값은 변환할 수 없습니다. |
10진수 | 잘린 값을 반환합니다. 잘린 10진수 값은 정수의 허용 범위 내에 있어야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 더블 값은 변환할 수 없습니다. |
Integer | int 값을 길이로 반환합니다. |
Long | 아니요. 긴 값을 반환합니다. |
문자열 | 문자열의 숫자 값을 반환합니다.
|
날짜 | Date를 epoch 이후의 밀리초 수로 변환합니다. |
다음 표에는 더블로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | |||||
|---|---|---|---|---|---|---|
| Long("1") | |||||
| Long("0") | |||||
| Long("2") | |||||
| Long("5") | |||||
| 오류 | |||||
| Long("8") | |||||
| Long("1522039108044") | |||||
| Long("-2") | |||||
| 오류 | |||||
| null | |||||
| Long("1048576") |
날짜로 변환
다음 표에는 날짜로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
Double | 잘린 double 값이 나타내는 밀리초 수에 해당하는 날짜를 반환합니다. 양수는 1970년 1월 1일 이후의 밀리초 수에 해당합니다. 음수는 1970년 1월 1일 이전의 밀리초 수에 해당합니다. |
10진수 | 잘린 10진수 값이 나타내는 밀리초 수에 해당하는 날짜를 반환합니다. 양수는 1970년 1월 1일 이후의 밀리초 수에 해당합니다. 음수는 1970년 1월 1일 이전의 밀리초 수에 해당합니다. |
Long | long 값이 나타내는 밀리초 수에 해당하는 날짜를 반환합니다. 양수는 1970년 1월 1일 이후의 밀리초 수에 해당합니다. 음수는 1970년 1월 1일 이전의 밀리초 수에 해당합니다. |
문자열 | 날짜 문자열에 해당하는 날짜를 반환합니다. 문자열은 다음과 같이 유효한 날짜 문자열이어야 합니다:
|
ObjectId | ObjectId의 타임스탬프에 해당하는 날짜를 반환합니다. |
타임스탬프 | 타임스탬프에 해당하는 날짜를 반환합니다. |
다음 표에는 날짜로의 몇 가지 변환 예가 나열되어 있습니다.
예시 | 결과 | ||||
|---|---|---|---|---|---|
| ISODate("1973-10-20T21:20:00.000Z") | ||||
| ISODate("2009-09-19T14:53:56.000Z") | ||||
| ISODate("2004-11-09T11:33:20.000Z") | ||||
| ISODate("1935-02-22T12:26:40.000Z") | ||||
| ISODate("2018-03-27T04:08:58.000Z") | ||||
| ISODate("2018-03-03T00:00:00.000Z") | ||||
| ISODate("2018-03-20T06:00:06.000Z") | ||||
| 오류 | ||||
| ISODate("2021-11-23T17:21:58.000Z") |
ObjectId로 변환
다음 표에는 ObjectId로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
문자열 | 길이 24의 16진수 문자열에 대한 ObjectId를 반환합니다. 길이가 24인 16진수 문자열이 아닌 문자열 값은 변환할 수 없습니다. |
다음 표에는 날짜로의 몇 가지 변환 예가 나열되어 있습니다.
예시 | 결과 | ||||
|---|---|---|---|---|---|
| ObjectId("5ab9cbfa31c2ab715d42129e") | ||||
| 오류 |
문자열로 변환
다음 표에는 문자열로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
배열 |
버전 8.3에 추가 되었습니다. |
BinData |
|
부울 | 불리언 값을 문자열로 반환합니다. |
날짜 |
|
10진수 |
|
Double |
|
Integer |
|
Long |
|
최대 키 |
버전 8.3에 추가 되었습니다. |
최소 키 |
버전 8.3에 추가 되었습니다. |
객체 | 객체 를 문자열로 반환합니다. 버전 8.3에 추가 되었습니다. |
ObjectId |
|
정규 표현식 |
버전 8.3에 추가 되었습니다. |
문자열 | 작동하지 않습니다. string 값을 반환합니다. |
타임스탬프 |
버전 8.3에 추가 되었습니다. |
참고
다음 표에는 문자열로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||||
|---|---|---|---|---|---|---|---|
| "true" | ||||||
| "false" | ||||||
| "2.5" | ||||||
| "2" | ||||||
| "1000" | ||||||
| "5ab9c3da31c2ab715d421285" | ||||||
| "2018-03-27T16:58:51.538Z" | ||||||
| 'hn3f' | ||||||
| "invalid" |
예시
기본 변환 예시
자리 표시자 document 사용하여 examples 컬렉션 만듭니다.
db.examples.insertOne({ _id: 1 })
다음 예시 서로 다른 진법을 사용하여 숫자와 문자열을 변환합니다.
db.examples.aggregate([ { $project: { _id: 0, bin: { $convert: { input: 10, to: "string", base: 2 } }, hex: { $convert: { input: 10, to: "string", base: 16 } }, intFromBin: { $convert: { input: "1010", to: "int", base: 2 } }, intFromHex: { $convert: { input: "A", to: "int", base: 16 } } } } ])
이 작업은 다음 document 반환합니다.
{ bin: "1010", hex: "A", intFromBin: 10, intFromHex: 10 }
유형 변환 예시
다음 문서를 사용하여 컬렉션 orders를 생성합니다.
db.orders.insertMany( [ { _id: 1, item: "apple", qty: 5, price: 10 }, { _id: 2, item: "pie", qty: 10, price: Decimal128("20.0") }, { _id: 3, item: "ice cream", qty: 2, price: "4.99" }, { _id: 4, item: "almonds" }, { _id: 5, item: "bananas", qty: 5000000000, price: Decimal128("1.25") } ] )
orders 컬렉션에서의 다음 집계 연산은 price를 10진수로 변환합니다.
// Define stage to add convertedPrice and convertedQty fields with // the converted price and qty values. // If price or qty values are missing, the conversion returns a // value of decimal value or int value of 0. // If price or qty values cannot be converted, the conversion returns // a string priceQtyConversionStage = { $addFields: { convertedPrice: { $convert: { input: "$price", to: "decimal", onError: "Error", onNull: Decimal128("0") } }, convertedQty: { $convert: { input: "$qty", to: "int", onError:{ $concat: [ "Could not convert ", { $toString:"$qty" }, " to type integer." ] }, onNull: Int32("0") } }, } }; totalPriceCalculationStage = { $project: { totalPrice: { $switch: { branches: [ { case: { $eq: [ { $type: "$convertedPrice" }, "string" ] }, then: "NaN" }, { case: { $eq: [ { $type: "$convertedQty" }, "string" ] }, then: "NaN" }, ], default: { $multiply: [ "$convertedPrice", "$convertedQty" ] } } } } }; db.orders.aggregate( [ priceQtyConversionStage, totalPriceCalculationStage ])
이 작업은 다음 문서를 반환합니다.
{ _id: 1, totalPrice: Decimal128("50") }, { _id: 2, totalPrice: Decimal128("200.0") }, { _id: 3, totalPrice: Decimal128("9.98") }, { _id: 4, totalPrice: Decimal128("0") }, { _id: 5, totalPrice: 'NaN' }
자세히 알아보기
다음을 사용하여 값을 배열 로 변환합니다.
$toArray다음을 사용하여 문자열을 객체 로 변환합니다.
$toObject다음을 사용하여 값을 부울로 변환합니다.
$toBool다음을 사용하여 값을 정수로 변환합니다.
$toInt다음을 사용하여 값을 소수로 변환합니다.
$toDecimal다음을 사용하여 값을 double 변환합니다.
$toDouble다음을 사용하여 값을 long으로 변환합니다.
$toLong다음을 사용하여 값을 날짜로 변환합니다.
$toDate다음을 사용하여 값을 ObjectId로 변환합니다.
$toObjectId다음을 사용하여 값을 문자열로 변환합니다.
$toString다음을 사용하여 날짜 문자열을 날짜 객체 로 변환합니다.
$dateFromString다음을 사용하여 날짜 객체 문자열로 변환합니다.
$dateToString