변환(집계)
정의
호환성
다음 환경에서 호스팅되는 배포에 $convert
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$convert
의 구문은 다음과 같습니다:
{ $convert: { input: <expression>, to: <type expression>, onError: <expression>, // Optional. onNull: <expression> // Optional. } }
$convert
는 다음 필드가 포함된 문서를 사용합니다.
필드 | 설명 | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
input | ||||||||||||||||||||||||||||
to | 인수는 다음 숫자 또는 문자열 식별자 중 하나로 해석되는 모든 유효한 표현식일 수 있습니다.
| |||||||||||||||||||||||||||
onError | 선택 사항입니다. 지원되지 않는 유형 변환을 포함하여 변환 중 오류가 발생했을 때 반환할 값입니다. 인수는 유효한 모든 표현식일 수 있습니다. 지정하지 않으면 오류 발생 시 작업에 오류가 발생하고 중지됩니다. | |||||||||||||||||||||||||||
onNull |
$convert
이외에도 MongoDB는 기본 'onError'와 'onNull' 동작이 허용되는 경우 다음과 같은 집계 연산자를 축약형으로 제공합니다.
행동
불(Boolean)로 변환하기
다음 표에는 더블로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
---|---|
배열 | 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 . |
Double | 잘린 값을 반환합니다. 잘린 double 값은 정수의 최소값과 최대값 내에 속해야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 double 값은 변환할 수 없습니다. |
10진수 | 잘린 값을 반환합니다. 잘린 10진수 값은 정수의 허용 범위 내에 있어야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 소숫값은 변환할 수 없습니다. |
Integer | 아니요. 정수 값을 반환합니다. |
Long | 긴 값을 정수로 반환합니다. long 값은 정수의 최소값과 최대값 내에 있어야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 Long 값은 변환할 수 없습니다. |
문자열 | 문자열의 숫자 값을 정수로 반환합니다. 문자열 값은 기본 10진수여야 하고(예: 부동소수점, 십진수, 10이 아닌 밑수의 문자열 값(예: |
다음 표에는 정수로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||
---|---|---|---|---|---|
| 1 | ||||
| 0 | ||||
| 1 | ||||
| 5 | ||||
| 오류 | ||||
| 5000 | ||||
| 오류 | ||||
| -2 | ||||
| 오류 | ||||
| null |
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 . |
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 |
Long으로 변환
다음 표에는 로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
---|---|
부울 | Returns 0 for false .Returns 1 for true . |
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 |
날짜로 변환
다음 표에는 날짜로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
---|---|
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") | ||||
| 오류 |
문자열로 변환
다음 표에는 문자열로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
---|---|
부울 | 부울 값을 문자열로 반환합니다. |
Double | double 값을 문자열로 반환합니다. |
10진수 | 십진수 값을 문자열로 반환합니다. |
Integer | 정수 값을 문자열로 반환합니다. |
Long | 긴 값을 문자열로 반환합니다. |
ObjectId | ObjectId 값을 16진수 문자열로 반환합니다... |
문자열 | 아니요. 문자열 값을 반환합니다. |
날짜 | 날짜를 문자열로 반환합니다. |
다음 표에는 문자열로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||
---|---|---|---|---|---|
| "true" | ||||
| "false" | ||||
| "2.5" | ||||
| "2" | ||||
| "1000" | ||||
| "5ab9c3da31c2ab715d421285" | ||||
| "2018-03-27T16:58:51.538Z" |
예시
다음 문서를 사용하여 컬렉션 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' }