정의
호환성
다음 환경에서 호스팅되는 배포에 $convert 사용할 수 있습니다.
- MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
$convert 의 구문은 다음과 같습니다:
{ $convert: { input: <expression>, to: <type expression>, onError: <expression>, // Optional. onNull: <expression> // Optional. } }
The $convert takes a document with the following fields:
필드 | 설명 |
|---|---|
| |
| The argument can be any valid expression that resolves to a numeric or string identifier. For available identifiers, see Type Identifiers. |
| 선택 사항입니다. 지원되지 않는 유형 변환을 포함하여 변환 중 오류가 발생했을 때 반환할 값입니다. 인수는 유효한 모든 표현식일 수 있습니다. 지정하지 않으면 오류 발생 시 작업에 오류가 발생하고 중지됩니다. |
|
In addition to $convert, MongoDB provides the following aggregation operators as shorthand when the default "onError" and "onNull" behavior is acceptable:
유형 식별자
to 필드는 다음 숫자 및 string 식별자를 허용합니다.
문자열 식별자 | 숫자 식별자 | 참고 사항 |
|---|---|---|
"double" | 1 | |
"문자열" | 2 | |
"objectId" | 7 | |
"bool" | 8 | |
'날짜' | 9 | |
"in" | 16 | |
"long" | 18 | |
"십진수" | 19 |
행동
불(Boolean)로 변환하기
다음 표에는 더블로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
배열 | true를 반환합니다 |
이진 데이터 | true를 반환합니다 |
부울 | 아니요. 부울 값을 반환합니다. |
코드 | true를 반환합니다 |
날짜 | true를 반환합니다 |
10진수 | 0이 아니면 true를 반환합니다. |
Double | 0이 아니면 true를 반환합니다. |
Integer | 0이 아니면 true를 반환합니다. |
JavaScript | true를 반환합니다 |
Long | 0이 아니면 true를 반환합니다. |
최대 키 | true를 반환합니다 |
최소 키 | true를 반환합니다 |
Null |
|
객체 | true를 반환합니다 |
ObjectId | true를 반환합니다 |
정규 표현식 | true를 반환합니다 |
문자열 | true를 반환합니다 |
타임스탬프 | true를 반환합니다 |
MongoDB의 데이터 유형에 대해 자세히 알아보려면 BSON types를 참조하세요.
다음 표에는 더블로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||
|---|---|---|---|---|---|
| true | ||||
| 거짓 | ||||
| true | ||||
| true | ||||
| 거짓 | ||||
| true | ||||
| true | ||||
| true | ||||
| true | ||||
| true | ||||
| null |
정수로 변환
다음 표에는 정수로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 |
|
Double | 잘린 값을 반환합니다. 잘린 double 값은 정수의 최소값과 최대값 내에 속해야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 double 값은 변환할 수 없습니다. |
10진수 | 잘린 값을 반환합니다. 잘린 10진수 값은 정수의 허용 범위 내에 있어야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 소숫값은 변환할 수 없습니다. |
Integer | 아니요. 정수 값을 반환합니다. |
Long | 긴 값을 정수로 반환합니다. long 값은 정수의 최소값과 최대값 내에 있어야 합니다. 최소 정수 값보다 작거나 최대 정수 값보다 큰 Long 값은 변환할 수 없습니다. |
문자열 | 문자열의 숫자 값을 정수로 반환합니다. 문자열 값은 기본 10진수여야 하고(예: 부동소수점, 십진수, 10이 아닌 밑수의 문자열 값(예: |
다음 표에는 정수로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||
|---|---|---|---|---|---|
| 1 | ||||
| 0 | ||||
| 1 | ||||
| 5 | ||||
| 오류 | ||||
| 5000 | ||||
| 오류 | ||||
| -2 | ||||
| 오류 | ||||
| null |
팁
$toInt 연산자를 사용하세요.
10진수로 변환
다음 표에는 10진수로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 |
|
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로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 |
|
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으로 변환
다음 표에는 로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 |
|
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") |
팁
$toDate연산자
ObjectId로 변환
다음 표에는 ObjectId로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
문자열 | 길이 24의 16진수 문자열에 대한 ObjectId를 반환합니다. 길이가 24인 16진수 문자열이 아닌 문자열 값은 변환할 수 없습니다. |
다음 표에는 날짜로의 몇 가지 변환 예가 나열되어 있습니다.
예시 | 결과 | ||||
|---|---|---|---|---|---|
| ObjectId("5ab9cbfa31c2ab715d42129e") | ||||
| 오류 |
팁
$toObjectId 연산자를 사용하세요.
문자열로 변환
다음 표에는 문자열로 변환할 수 있는 입력 유형이 나열되어 있습니다.
입력 유형 | 행동 |
|---|---|
부울 | 부울 값을 문자열로 반환합니다. |
Double | double 값을 문자열로 반환합니다. |
10진수 | 십진수 값을 문자열로 반환합니다. |
Integer | 정수 값을 문자열로 반환합니다. |
Long | 긴 값을 문자열로 반환합니다. |
ObjectId | ObjectId 값을 16진수 문자열로 반환합니다... |
문자열 | 아니요. 문자열 값을 반환합니다. |
날짜 | 날짜를 문자열로 반환합니다. |
다음 표에는 문자열로 변환하는 몇 가지 예가 나와 있습니다:
예시 | 결과 | ||||||
|---|---|---|---|---|---|---|---|
| "true" | ||||||
| "false" | ||||||
| "2.5" | ||||||
| "2" | ||||||
| "1000" | ||||||
| "5ab9c3da31c2ab715d421285" | ||||||
| "2018-03-27T16:58:51.538Z" | ||||||
| 'hn3f' | ||||||
| "invalid" |
예시
이 페이지의 예시는 sample_mflix 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB 배포서버에 로드하는 방법에 대한 자세한 내용은 샘플 데이터세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우, 이 페이지의 예시를 실행하려면 데이터베이스를 제거하고 다시 생성해야 할 수 있습니다.
기본 변환 예시
16진수 문자열은 정수를 간결하게 표현하는 방법이며, 많은 시스템에서 식별자를 16진수 값으로 교환합니다. 다음 예시 각 영화의 숫자 imdb.id를 16진수 문자열로 변환합니다.
db.movies.aggregate( [ { $match: { title: { $in: [ "The Godfather", "Toy Story", "Metropolis" ] } } }, { $sort: { title: 1 } }, { $project: { _id: 0, title: 1, imdbId: "$imdb.id", hexId: { $convert: { input: "$imdb.id", to: "string", base: 16 } } } } ] )
[ { title: 'Metropolis', imdbId: 293416, hexId: '47A28' }, { title: 'The Godfather', imdbId: 68646, hexId: '10C26' }, { title: 'Toy Story', imdbId: 114709, hexId: '1C015' } ]
16진수 문자열을 다시 정수로 변환하려면 base: 16 및 to: "int"를 사용하여 문자열을 $convert에 전달합니다.
유형 변환 예시
다음 집계 작업은 대부분의 문서에서는 double이지만 다른 문서에서는 빈 문자열인 imdb.rating 필드 double로 변환합니다. 또한 일부 문서에서 누락된 metacritic 필드 정수로 변환합니다.$match 단계에서는 각 전환 결과를 보여주는 세 편의 영화를 선택합니다.
db.movies.aggregate( [ { $match: { title: { $in: [ "The Danish Girl", "The Godfather", "Gertie the Dinosaur" ] } } }, { $project: { _id: 0, title: 1, rating: { $convert: { input: "$imdb.rating", to: "double", onError: "Error", onNull: 0 } }, metacritic: { $convert: { input: "$metacritic", to: "int", onError: "Error", onNull: 0 } } } }, { $sort: { title: 1 } } ] )
[ { title: 'Gertie the Dinosaur', rating: 7.3, metacritic: 0 }, { title: 'The Danish Girl', rating: 'Error', metacritic: 0 }, { title: 'The Godfather', rating: 9.2, metacritic: 100 } ]
The Danish Girl의 경우, imdb.rating의 빈 문자열은 이중으로 변환할 수 없으므로 onError는 "Error"을 반환합니다. Gertie the Dinosaur 및 The Danish Girl의 경우 metacritic이 누락되었으므로 onNull은 0을 반환합니다.