정의
호환성
다음 환경에서 호스팅되는 배포에 $convert 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
버전 8.0에서 변경되었습니다.
{ $convert: { input: <expression>, to: <type expression> || { type: <type expression>, subtype: <int> }, format: <string>, onError: <expression>, onNull: <expression> } }
$convert는 다음 필드가 포함된 문서를 사용합니다.
필드 | 필요성 | 설명 | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 필수 사항 | |||||||||||||||||||||||||||||||
| 필수 사항 |
| ||||||||||||||||||||||||||||||
|
| 인수는 다음 숫자 또는 문자열 식별자 중 하나로 해석되는 모든 유효한 표현식일 수 있습니다.
| ||||||||||||||||||||||||||||||
| 옵션 |
기본값: 0(일반 바이너리 하위 유형) | ||||||||||||||||||||||||||||||
| 옵션 |
| ||||||||||||||||||||||||||||||
|
|
| ||||||||||||||||||||||||||||||
| 옵션 | 변환 중 오류가 발생했을 때 반환할 값입니다. 여기에는 지원되지 않는 유형 변환이 포함됩니다. 인수는 유효한 모든 표현식일 수 있습니다. 지정하지 않으면 오류 발생 시 작업에 오류가 발생하고 중지됩니다. | ||||||||||||||||||||||||||||||
| 옵션 |
$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: { convertedBD: { $convert: { input: Long(42), to: "binData", } }, } } ])
{ _id: ObjectId('67dda0195a99e592590143e8'), convertedBD: Binary.createFromBase64('KgAAAAAAAAA=', 0) }
빅 엔디안 바이트 순서를 사용하여 long 를 binData 로 변환합니다.
db.t.insertOne({a: Long(42)}) db.t.aggregate([ { $project: { convertedBD: { $convert: { input: Long(42), to: "binData", byteOrder: "big", } }, } } ])
{ _id: ObjectId('67ddb27c5a99e592590143ec'), convertedBD: Binary.createFromBase64('AAAAAAAAACo=', 0), }
double 을 binData로 변환합니다:
db.t.insertOne({a: Double(42.0)}) db.t.aggregate([ { $project: { convertedBD: { $convert: { input: Double(42), to: "binData", } }, } } ])
{ _id: ObjectId('67ddb3cf5a99e592590143ee'), convertedBD: Binary.createFromBase64('AAAAAAAARUA=', 0) }
int 을 binData로 변환합니다:
db.t.insertOne({a: 42}) db.t.aggregate([ { $project: { convertedBD: { $convert: { input: 42, to: "binData", } }, } } ])
{ _id: ObjectId('67ddb43a5a99e592590143ef'), convertedBD: Binary.createFromBase64('KgAAAA==', 0) }
문자열에서 BinData로 변환
MongoDB binData 와 문자열 간의 변환도 지원합니다.
다음 예제에서는 문자열을 binData로 변환하는 방법을 보여 줍니다.
예시 | 결과 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| | |||||||||||
| |
참고
MongoDB 8.1부터 $convert 는 서로 다른 binData 하위 유형 간에 변환을 시도할 때 오류를 반환합니다. MongoDB 8.0에서 $convert 는 원래 값과 원래 하위 유형을 반환합니다: 변환이 수행되지 않습니다. 8.0 이전의 MongoDB 버전에는 binData 변환 기능이 없습니다.
부울로 변환
다음 표에는 더블로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
배열 | 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 값은 변환할 수 없습니다. |
문자열 | 문자열의 숫자 값을 정수로 반환합니다. 문자열 값은 기본 10진수여야 하고(예: 부동소수점, 십진수, 10이 아닌 밑수의 문자열 값(예: |
다음 표에는 정수로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | |||||
|---|---|---|---|---|---|---|
| 1 | |||||
| 0 | |||||
| 1 | |||||
| 5 | |||||
| 오류 | |||||
| 5000 | |||||
| 오류 | |||||
| -2 | |||||
| 오류 | |||||
| null | |||||
| 1048576 | |||||
| -1763180545 | |||||
| 오류: 잘못된 길이로 인해 BinData를 변환하지 못했습니다: 7 |
팁
$toInt 연산자를 사용하세요.
10진수로 변환
다음 표에는 10진수로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 | Returns Decimal128( "0" ) for false.Returns Decimal128( "1" ) for true. |
Double | double 값을 10진수로 반환합니다. |
10진수 | 아니요. 소수를 반환합니다. |
Integer | int 값을 10진수로 반환합니다. |
Long | Long 값을 10진수로 반환합니다. |
문자열 | 문자열의 숫자 값을 10진수로 반환합니다. 문자열 값은 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로 반환합니다. 문자열 값은 10진수 숫자 값 (예: 10진수가 아닌 숫자 형태의 문자열 값(예: |
날짜 | 날짜 값에 해당하는 epoch 이후의 밀리초 수를 반환합니다. |
다음 표에는 double로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | |||||
|---|---|---|---|---|---|---|
| 1 | |||||
| 0 | |||||
| 2.5 | |||||
| 5 | |||||
| 10000 | |||||
| -5.5 | |||||
| 50000000000 | |||||
| 1522039108044 | |||||
| 4.814824932714571e-36 | |||||
| 오류: 잘못된 길이로 인해 binData를 변환하지 못했습니다: 2 |
길게 변환
다음 표에는 로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 | Returns 0 for false.Returns 1 for true. |
BinData |
|
Double | 잘린 값을 반환합니다. 잘린 double 값은 정수의 최소값과 최대값 내에 속해야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 double 값은 변환할 수 없습니다. |
10진수 | 잘린 값을 반환합니다. 잘린 10진수 값은 정수의 허용 범위 내에 있어야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 더블 값은 변환할 수 없습니다. |
Integer | int 값을 길이로 반환합니다. |
Long | 아니요. 긴 값을 반환합니다. |
문자열 | 문자열의 숫자 값을 반환합니다. 문자열 값은 기본 10진수 길이여야 하고(예: 부동소수점, 십진수, 10이 아닌 밑수의 문자열 값(예: |
날짜 | 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") | ||||
| 오류 |
팁
$toObjectId 연산자를 사용하세요.
문자열로 변환
다음 표에는 문자열로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
BinData | 바이너리 데이터 값을 문자열로 반환합니다. |
부울 | 부울 값을 문자열로 반환합니다. |
Double | double 값을 문자열로 반환합니다. |
10진수 | 십진수 값을 문자열로 반환합니다. |
Integer | 정수 값을 문자열로 반환합니다. |
Long | 긴 값을 문자열로 반환합니다. |
ObjectId | ObjectId 값을 16진수 문자열로 반환합니다... |
문자열 | 아니요. 문자열 값을 반환합니다. |
날짜 | 날짜를 문자열로 반환합니다. |
다음 표에는 문자열로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | |||||
|---|---|---|---|---|---|---|
| "true" | |||||
| "false" | |||||
| "2.5" | |||||
| "2" | |||||
| "1000" | |||||
| "5ab9c3da31c2ab715d421285" | |||||
| "2018-03-27T16:58:51.538Z" | |||||
| 'hn3f' |
예시
다음 문서를 사용하여 컬렉션 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' }