문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

변환(집계)

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 행동
  • 예제
$convert

값을 지정된 유형으로 변환합니다.

다음 환경에서 호스팅되는 배포에 $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

인수는 다음 숫자 또는 문자열 식별자 중 하나로 해석되는 모든 유효한 표현식일 수 있습니다.

문자열 식별자
숫자 식별자
참고 사항
"double"
1
double로 변환하는 방법에 대한 자세한 내용은 double로 변환하기를 참조하세요.
"문자열"
2
string으로 변환하는 방법에 대한 자세한 내용은 문자열로 변환을 참조하세요.
"objectId"
7
ObjectId로 변환하는 방법에 대한 자세한 내용은 ObjectId로 변환하기를 참조하세요.
"bool"
8
불 방식으로 변환하는 방법에 대한 자세한 내용은 불 방식으로 변환하기를 참조하세요.
'날짜'
9
date로 변환하는 방법에 대한 자세한 내용은 날짜로 변환을 참조하세요.
"in"
16
정수로의 변환에 대한 자세한 내용은 정수로 변환을 참조하세요.
"긴"
18
long으로의 변환에 대한 자세한 내용은 long으로 변환을 참조하세요.
"십진수"
19
decimal로 변환하는 방법에 대한 자세한 내용은 10진수로 변환을 참조하세요.
onError

선택 사항입니다. 지원되지 않는 유형 변환을 포함하여 변환 중 오류가 발생했을 때 반환할 값입니다. 인수는 유효한 모든 표현식일 수 있습니다.

지정하지 않으면 오류 발생 시 작업에 오류가 발생하고 중지됩니다.

onNull

선택 사항입니다. input가 null이거나 누락된 경우 반환할 값입니다. 인수는 유효한 표현식일 수 있습니다.

미지정 시 $convertinput이 null이거나 누락된 경우 null을 반환합니다.

$convert 이외에도 MongoDB는 기본 'onError'와 'onNull' 동작이 허용되는 경우 다음과 같은 집계 연산자를 축약형으로 제공합니다.

다음 표에는 더블로 변환할 수 있는 입력 유형이 나열되어 있습니다.

입력 유형
행동
배열
true를 반환합니다
이진 데이터
true를 반환합니다
부울
아니요. 부울 값을 반환합니다.
코드
true를 반환합니다
날짜
true를 반환합니다
10진수
0이 아니면 true 반환
0이면 false 반환
더블
0이 아니면 true 반환
0이면 false 반환
Integer
0이 아니면 true 반환
0이면 false 반환
JavaScript
true를 반환합니다
Long
0이 아니면 true 반환
0이면 false 반환
최대 키
true를 반환합니다
최소 키
true를 반환합니다
Null

onNull 옵션에 지정된 값을 반환합니다. 기본적으로 null을 반환합니다.

개체
true를 반환합니다
ObjectId
true를 반환합니다
정규 표현식
true를 반환합니다
문자열
true를 반환합니다
타임스탬프
true를 반환합니다

MongoDB의 데이터 유형에 대해 자세히 알아보려면 BSON types를 참조하세요.

다음 표에는 더블로 변환하는 몇 가지 예가 나와 있습니다:

예제
결과
{ input: true, to: "bool" }
true
{ input: false, to: "bool" }
거짓
{ input: 1.99999, to: "bool" }
true
{ input: Decimal128( "5" ), to: "bool" }
true
{ input: Decimal128( "0" ), to: "bool" }
거짓
{ input: 100, to: "bool" }
true
{
input: ISODate( "2018-03-26T04:38:28.044Z" ),
to: "bool"
}
true
{ input: "hello", to: "bool" }
true
{ input: "false", to: "bool" }
true
{ input: "", to: "bool" }
true
{ input: null, to: "bool" }
null

다음도 참조하세요.

다음 표에는 정수로 변환할 수 있는 입력 유형이 나열되어 있습니다.

입력 유형
행동
부울
false인 경우 0를 반환합니다.
true인 경우 1를 반환합니다.
더블

잘린 값을 반환합니다.

잘린 더블 값은 정수의 최소값과 최대값 내에 속해야 합니다.

최소 정수 값보다 작거나 최대 정수 값보다 큰 더블 값은 변환할 수 없습니다.

10진수

잘린 값을 반환합니다.

잘린 10진수 값은 정수의 허용 범위 내에 있어야 합니다.

최소 정수 값보다 작거나 최대 정수 값보다 큰 소숫값은 변환할 수 없습니다.

Integer
아니요. 정수 값을 반환합니다.
Long

긴 값을 정수로 반환합니다.

long 값은 정수의 최소값과 최대값 내에 있어야 합니다.

최소 정수 값보다 작거나 최대 정수 값보다 큰 Long 값은 변환할 수 없습니다.

문자열

문자열의 숫자 값을 정수로 반환합니다.

문자열 값은 기본 10진수여야 하고(예: "-5", "123456") 최솟값과 최댓값 범위 내에 있어야 합니다.

부동소수점, 십진수, 10이 아닌 밑수의 문자열 값(예: "-5.0", "0x6400") 또는 정수의 최소값과 최대값을 벗어나는 값은 변환할 수 없습니다.

다음 표에는 정수로 변환하는 몇 가지 예가 나와 있습니다:

예제
결과
{ input: true, to: "int" }
1
{ input: false, to: "int" }
0
{ input: 1.99999, to: "int" }
1
{ input: Decimal128( "5.5000" ), to: "int" }
5
{
input: Decimal128( "9223372036000.000" ),
to: "int"
}
오류
{ input: Long( "5000" ), to: "int" }
5000
{ input: Long( "922337203600" ), to: "int" }
오류
{ input: "-2", to: "int" }
-2
{ input: "2.5", to: "int" }
오류
{ input: null, to: "int" }
null

다음도 참조하세요.

$toInt 연산자를 사용하세요.

다음 표에는 10진수로 변환할 수 있는 입력 유형이 나열되어 있습니다.

입력 유형
행동
부울
false인 경우 Decimal128( "0" )를 반환합니다.
true인 경우 Decimal128( "1" )를 반환합니다.
더블
Double 값을 10진수로 반환합니다.
10진수
아니요. 소수를 반환합니다.
Integer
int 값을 10진수로 반환합니다.
Long
Long 값을 10진수로 반환합니다.
문자열

문자열의 숫자 값을 10진수로 반환합니다.

문자열 값은 10을 기본으로 하는 숫자 값이어야 합니다(예 "-5.5", "123456").

기본 10이 아닌 숫자의 문자열 값은 변환할 수 없습니다(예 "0x6400")

날짜
날짜 값에 해당하는 epoch 이후의 밀리초 수를 반환합니다.

다음 표에는 10진수로 변환하는 몇 가지 예가 나와 있습니다:

예제
결과
{ input: true, to: "decimal" }
Decimal128("1")
{ input: false, to: "decimal" }
Decimal128("0")
{ input: 2.5, to: "decimal" }
Decimal128( "2.50000000000000" )
{ input: Int32( 5 ), to: "decimal" }
Decimal128("5")
{ input: Long( 10000 ), to: "decimal" }
Decimal128("10000")
{ input: "-5.5", to: "decimal" }
Decimal128("-5.5")
{
input: ISODate( "2018-03-26T04:38:28.044Z" ),
to: "decimal"
}
Decimal128("1522039108044")

다음도 참조하세요.

다음 표에는 더블로 변환할 수 있는 입력 유형이 나열되어 있습니다.

입력 유형
행동
부울
false인 경우 NumberDouble(0)을 반환합니다.
true인 경우 NumberDouble(1)을 반환합니다.
더블
아니요. 더블 값을 반환합니다.
10진수

10진수 값을 더블로 반환합니다.

10진수 값은 더블의 최소값과 최대값 내에 속해야 합니다.

값이 최소 더블 값보다 작거나 최대 더블 값보다 큰 10진수 값은 변환할 수 없습니다.

Integer
int 값을 더블로 반환합니다.
Long
긴 값을 더블로 반환합니다.
문자열

문자열의 숫자 값을 더블로 반환합니다.

문자열 값은 10진수 숫자 값 (예: "-5.5" "123456") 이어야 하며, 더블의 최소값과 최대값 내에 속합니다.

10진수가 아닌 숫자 형태의 문자열 값(예: "0x6400") 이나 더블의 최소값과 최대값을 벗어나는 값은 변환할 수 없습니다.

날짜
날짜 값에 해당하는 epoch 이후의 밀리초 수를 반환합니다.

다음 표에는 더블로 변환하는 몇 가지 예가 나와 있습니다:

예제
결과
{ input: true, to: "double" }
1
{ input: false, to: "double" }
0
{ input: 2.5, to: "double" }
2.5
{ input: Int32( 5 ), to: "double" }
5
{ input: Long( "10000" ), to: "double" }
10000
{ input: "-5.5", to: "double" }
-5.5
{ input: "5e10", to: "double" }
50000000000
{
input: ISODate( "2018-03-26T04:38:28.044Z" ),
to: "double"
}
1522039108044

다음도 참조하세요.

다음 표에는 로 변환할 수 있는 입력 유형이 나열되어 있습니다.

입력 유형
행동
부울
false인 경우 0를 반환합니다.
true인 경우 1를 반환합니다.
더블

잘린 값을 반환합니다.

잘린 더블 값은 정수의 최소값과 최대값 내에 속해야 합니다.

최소 정수 값보다 작거나 최대 정수 값보다 큰 더블 값은 변환할 수 없습니다.

10진수

잘린 값을 반환합니다.

잘린 10진수 값은 정수의 허용 범위 내에 있어야 합니다.

최소 정수 값보다 작거나 최대 정수 값보다 큰 더블 값은 변환할 수 없습니다.

Integer
int 값을 길이로 반환합니다.
Long
아니요. 긴 값을 반환합니다.
문자열

문자열의 숫자 값을 반환합니다.

문자열 값은 기본 10진수 길이여야 하고(예: "-5", "123456") 최솟값과 최댓값 범위 내에 있어야 합니다.

부동소수점, 십진수, 10이 아닌 밑수의 문자열 값(예: "-5.0", "0x6400") 또는 long의 최소값과 최대값을 벗어나는 값은 변환할 수 없습니다.

날짜
Date를 epoch 이후의 밀리초 수로 변환합니다.

다음 표에는 더블로 변환하는 몇 가지 예가 나와 있습니다:

예제
결과
{ input: true, to: "long" }
Long("1")
{ input: false, to: "long" }
Long("0")
{ input: 2.5, to: "long" }
Long("2")
{ input: Decimal128( "5.5000" ), to: "long" }
Long("5")
{
input: Decimal128( "9223372036854775808.0" ),
to: "long"
}
오류
{ input: Int32( 8 ), to: "long" }
Long("8")
{
input: ISODate( "2018-03-26T04:38:28.044Z" ),
to: "long"
}
Long("1522039108044")
{ input: "-2", to: "long" }
Long("-2")
{ input: "2.5", to: "long" }
오류
{ input: null, to: "long" }
null

다음도 참조하세요.

다음 표에는 날짜로 변환할 수 있는 입력 유형이 나열되어 있습니다.

입력 유형
행동
더블

잘린 더블 값이 나타내는 밀리초 수에 해당하는 날짜를 반환합니다.

양수는 1970년 1월 1일 이후의 밀리초 수에 해당합니다.

음수는 1970년 1월 1일 이전의 밀리초 수에 해당합니다.

10진수

잘린 10진수 값이 나타내는 밀리초 수에 해당하는 날짜를 반환합니다.

양수는 1970년 1월 1일 이후의 밀리초 수에 해당합니다.

음수는 1970년 1월 1일 이전의 밀리초 수에 해당합니다.

Long

long 값이 나타내는 밀리초 수에 해당하는 날짜를 반환합니다.

양수는 1970년 1월 1일 이후의 밀리초 수에 해당합니다.

음수는 1970년 1월 1일 이전의 밀리초 수에 해당합니다.

문자열

날짜 문자열에 해당하는 날짜를 반환합니다.

문자열은 다음과 같이 유효한 날짜 문자열이어야 합니다:

  • "2018-03-03"

  • "2018-03-03T12:00:00Z"

  • "2018-03-03T12:00:00+0500"

ObjectId
객체 ID의 타임스탬프에 해당하는 날짜를 반환합니다.
타임스탬프
타임스탬프에 해당하는 날짜를 반환합니다.

다음 표에는 날짜로의 몇 가지 변환 예가 나열되어 있습니다.

예제
결과
{
input: 120000000000.5,
to: "date"
}
ISODate("1973-10-20T21:20:00.000Z")
{
input: Decimal128( "1253372036000.50" ),
to: "date"
}
ISODate("2009-09-19T14:53:56.000Z")
{
input: Long( "1100000000000" ),
to: "date
}
ISODate("2004-11-09T11:33:20.000Z")
{
input: Long( "-1100000000000" ),
to: "date"
}
ISODate("1935-02-22T12:26:40.000Z")
{
input: ObjectId( "5ab9c3da31c2ab715d421285" ),
to: "date"
}
ISODate("2018-03-27T04:08:58.000Z")
{ input: "2018-03-03", to: "date" }
ISODate("2018-03-03T00:00:00.000Z")
{
input: "2018-03-20 11:00:06 +0500",
to: "date"
}
ISODate("2018-03-20T06:00:06.000Z")
{ input: "Friday", to: "date" }
오류
{
input: Timestamp( { t: 1637688118, i: 1 } ),
to: "date"
}
ISODate("2021-11-23T17:21:58.000Z")

다음도 참조하세요.

다음 표에는 객체 ID로 변환할 수 있는 입력 유형이 나열되어 있습니다.

입력 유형
행동
문자열

길이 24의 16진수 문자열에 대한 객체 ID를 반환합니다.

길이가 24인 16진수 문자열이 아닌 문자열 값은 변환할 수 없습니다.

다음 표에는 날짜로의 몇 가지 변환 예가 나열되어 있습니다.

예제
결과
{
input: "5ab9cbfa31c2ab715d42129e",
to: "objectId"
}
ObjectId("5ab9cbfa31c2ab715d42129e")
{
input: "5ab9cbfa31c2ab715d42129",
to: "objectId"
}
오류

다음도 참조하세요.

$toObjectId 연산자를 사용하세요.

다음 표에는 문자열로 변환할 수 있는 입력 유형이 나열되어 있습니다.

입력 유형
행동
부울
부울 값을 문자열로 반환합니다.
더블
이중 값을 문자열로 반환합니다.
10진수
십진수 값을 문자열로 반환합니다.
Integer
정수 값을 문자열로 반환합니다.
Long
긴 값을 문자열로 반환합니다.
ObjectId
객체 ID 값을 16진수 문자열로 반환합니다 ...
문자열
아니요. 문자열 값을 반환합니다.
날짜
날짜를 문자열로 반환합니다.

다음 표에는 문자열로 변환하는 몇 가지 예가 나와 있습니다:

예제
결과
{ input: true, to: "string" }
"true"
{ input: false, to: "string" }
"false"
{ input: 2.5, to: "string" }
"2.5"
{ input: Int32( 2 ), to: "string" }
"2"
{ input: Long( 1000 ), to: "string" }
"1000"
{
input: ObjectId( "5ab9c3da31c2ab715d421285" ),
to: "string"
}
"5ab9c3da31c2ab715d421285"
{
input: ISODate( "2018-03-27T16:58:51.538Z" ),
to: "string"
}
"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' }

참고

이 예시에서는 mongosh를 사용합니다. 레거시 mongo 셸에서는 기본 유형이 다릅니다.

← $cond (애그리게이션)

이 페이지의 내용