정의
호환성
다음 환경에서 호스팅되는 배포에 $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 값을 | ||||||||||||||||||||||||||||||||||||
| 필수 사항 |
| ||||||||||||||||||||||||||||||||||||
|
| 인수는 다음 숫자 또는 문자열 식별자 중 하나로 해석되는 모든 유효한 표현식일 수 있습니다.
| ||||||||||||||||||||||||||||||||||||
| 옵션 |
기본값: 0(일반 바이너리 하위 유형) | ||||||||||||||||||||||||||||||||||||
| 옵션 |
| ||||||||||||||||||||||||||||||||||||
| 옵션 | 문자열과 숫자 유형 간의 변환을 위한 정수입니다.
버전 8.3에 추가 되었습니다. | ||||||||||||||||||||||||||||||||||||
|
|
| ||||||||||||||||||||||||||||||||||||
| 옵션 | 변환 중 오류가 발생했을 때 반환할 값입니다. 여기에는 지원되지 않는 유형 변환이 포함됩니다. 인수는 유효한 모든 표현식일 수 있습니다. 지정하지 않으면 오류 발생 시 작업에 오류가 발생하고 중지됩니다. | ||||||||||||||||||||||||||||||||||||
| 옵션 |
$convert 이외에도 MongoDB는 기본 'onError'와 'onNull' 동작이 허용되는 경우 다음과 같은 집계 연산자를 축약형으로 제공합니다.
행동
다음 섹션에서는 값을 다른 유형으로 변환하는 방법을 설명합니다.
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 형식에 따라 달라집니다. |
문자열 | 문자열 내의 내용에 해당하는 배열 반환합니다. 문자열에는 유효한 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 을(를) 해당 유형의 값이 포함된 배열로 변환하는 방법을 보여 줍니다.
입력:
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에 추가 되었습니다.
다음 표에는 객체 로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
문자열 | 문자열 내의 내용에 해당하는 문서 반환합니다. 문자열에는 유효한 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 값은 변환할 수 없습니다. |
문자열 | 문자열의 숫자 값을 정수로 반환합니다. 을 생략하거나 로 설정하다
|
다음 표에는 정수로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | |||||
|---|---|---|---|---|---|---|
| 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 부터 서버 표현 가능한 모든 배정밀도 부동 점 숫자의 전체 범위 구문 분석할 수 있습니다. 여기에는 최상위 숫자 앞에 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에 추가 되었습니다. |
문자열 | 작동하지 않습니다. 문자열 값을 반환합니다. |
타임스탬프 | 를 문자열로 버전 8.3에 추가 되었습니다. |
참고
다음 표에는 문자열로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||||
|---|---|---|---|---|---|---|---|
| "true" | ||||||
| "false" | ||||||
| "2.5" | ||||||
| "2" | ||||||
| "1000" | ||||||
| "5ab9c3da31c2ab715d421285" | ||||||
| "2018-03-27T16:58:51.538Z" | ||||||
| 'hn3f' | ||||||
| "invalid" |
예시
기본 변환 예제
자리 표시자 문서 사용하여 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 } } } } ])
이 작업은 다음 문서 반환합니다.
{ 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