$dateFromString (집계)
정의
$dateFromString
날짜/시간 문자열을 날짜 객체로 변환합니다.
$dateFromString
표현식의 구문은 다음과 같습니다.{ $dateFromString: { dateString: <dateStringExpression>, format: <formatStringExpression>, timezone: <tzExpression>, onError: <onErrorExpression>, onNull: <onNullExpression> } } $dateFromString
는 다음 필드가 포함된 문서를 사용합니다.필드설명dateString
날짜 객체로 변환할 날짜/시간 문자열입니다. 날짜/시간 형식에 대한 자세한 내용은
Date()
를 참조하세요.연산자에
timezone
옵션을 지정하는 경우dateString
에 구역 정보를 포함하지 마세요.format
선택 사항입니다.
dateString
의 날짜 형식 사양입니다.format
은 0 개 이상의 형식 지정자를 포함하는 문자열 리터럴로 평가되는 모든 표현식일 수 있습니다. 사용 가능한 지정자 목록은 형식 지정자를 참조하세요.지정하지 않는 경우
$dateFromString
은"%Y-%m-%dT%H:%M:%S.%LZ"
를 기본 형식으로 사용하지만 다양한 형식을 허용하고 가능한 경우dateString
에 대해 구문 분석을 시도합니다.timezone
선택 사항입니다. 날짜 서식을 지정하는 데 사용할 표준 시간대입니다.
dateString
인수가 '2017-02-08T12:10:40.787Z'와 같은 형식이고 끝의 'Z'가 Zulu 시간(UTC 표준 시간대)을 나타내는 경우timezone
인수를 지정할 수 없습니다.<timezone>
은 다음과 같은 옵션과 이를 평가하는 표현식을 사용할 수 있습니다.Olson 표준 시간대 식별자
"Europe/London"
(예:"America/New_York"
또는 ), 또는형식의 UTC 오프셋입니다.
+/-[hh]:[mm]
, 예:"+04:45"
, 또는+/-[hh][mm]
, 예:"-0530"
, 또는+/-[hh]
, 예:"+03"
, 또는
문자열
"Z"
,"UTC"
또는"GMT"
표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요.
onError
선택 사항입니다.
$dateFromString
이 주어진dateString
을 구문 분석하는 동안 오류가 발생하면 제공된onError
표현식의 결과 값을 출력합니다. 이 결과 값은 모든 유형이 가능합니다.onError
를 지정하지 않으면$dateFromString
이dateString
을 구문 분석할 수 없는 경우 오류가 발생합니다.onNull
선택 사항입니다.
$dateFromString
에 제공된dateString
가null
이거나 누락된 경우 제공된onNull
표현식의 결과 값을 출력합니다. 이 결과 값은 모든 유형이 가능합니다.onNull
을 지정하지 않고dateString
이null
또는 누락된 경우$dateFromString
은null
을 출력합니다.
행동
예시 | 결과 | ||||
---|---|---|---|---|---|
| ISODate("2017-02-08T12:10:40.787Z") | ||||
| ISODate("2017-02-08T17:10:40.787Z") | ||||
| ISODate("2017-02-08T00:00:00Z") | ||||
| ISODate("2020-10-20T00:00:00.000Z") | ||||
| ISODate("2018-06-15T00:00:00Z") | ||||
| ISODate("2018-06-15T00:00:00Z") | ||||
| ISODate("1996-01-31T08:35:28.000Z") |
형식 지정자
<formatString>
에서 사용할 수 있는 형식 지정자:
지정자 | 설명 | Possible Values |
---|---|---|
%b | 월 이름 축약형(3자) | jan , feb , mar , apr , may , jun , jul , aug , sep , oct , nov , dec |
%B | 월 이름 전체 | january -december |
%d | 월과 요일(2자리, 제로 패딩) | 01 -31 |
%G | ISO 8601 형식의 연도 | 0000 -9999 |
%H | 시(2자리, 제로 패딩, 24시간 시계) | 00 -23 |
%j | 1년 기준 일수(3자리, 영숫자) | 001 -366 |
%L | 밀리초(3자리, 제로 패딩) | 000 -999 |
%m | 월(2자리, 제로 패딩) | 01 -12 |
%M | 분(2자리, 제로 패딩) | 00 -59 |
%S | 초(2자리, 제로 패딩) | 00 -60 |
%u | ISO 8601 형식의 요일 번호(1-월요일, 7-일요일) | 1 -7 |
%U | 연도별 주(2자리, 제로 패딩) | 00 -53 |
%V | ISO 8601 형식의 연도별 주 | 1 -53 |
%w | 정수로 표현된 요일(0-일요일, 6-토요일) | 0 -6 |
%Y | 연도(4자리, 0 패딩) | 0000 -9999 |
%z | UTC의 표준 시간대 오프셋. | +/-[hh][mm] |
%Z | UTC에서 오프셋된 분을 숫자로 표시합니다. 예를 들어 표준 시간대 오프셋( +/-[hhmm] )이 +0445 이면 분 오프셋은 +285 입니다. | +/-mmm |
%% | 리터럴로서의 백분율 문자 | % |
예시
날짜 변환하기
날짜가 있는 다음 문서가 포함된 collection logmessages
를 고려해 보겠습니다.
{ _id: 1, date: "2017-02-08T12:10:40.787", timezone: "America/New_York", message: "Step 1: Started" }, { _id: 2, date: "2017-02-08", timezone: "-05:00", message: "Step 1: Ended" }, { _id: 3, message: " Step 1: Ended " }, { _id: 4, date: "2017-02-09", timezone: "Europe/London", message: "Step 2: Started"}, { _id: 5, date: "2017-02-09T03:35:02.055", timezone: "+0530", message: "Step 2: In Progress"}
다음 집계는 $dateFromString을 사용하여 date
값을 날짜 객체로 변환합니다.
db.logmessages.aggregate( [ { $project: { date: { $dateFromString: { dateString: '$date', timezone: 'America/New_York' } } } } ] )
위 집계는 다음 문서를 반환하고 각 date
필드를 동부 표준 시간대로 변환합니다.
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") } { "_id" : 2, "date" : ISODate("2017-02-08T05:00:00Z") } { "_id" : 3, "date" : null } { "_id" : 4, "date" : ISODate("2017-02-09T05:00:00Z") } { "_id" : 5, "date" : ISODate("2017-02-09T08:35:02.055Z") }
하드 코딩된 인수 대신 문서 필드를 통해 timezone
인수를 제공할 수도 있습니다. 예시:
db.logmessages.aggregate( [ { $project: { date: { $dateFromString: { dateString: '$date', timezone: '$timezone' } } } } ] )
위 집계는 다음 문서를 반환하고 각 date
필드를 해당 UTC 표현으로 변환합니다.
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") } { "_id" : 2, "date" : ISODate("2017-02-08T05:00:00Z") } { "_id" : 3, "date" : null } { "_id" : 4, "date" : ISODate("2017-02-09T00:00:00Z") } { "_id" : 5, "date" : ISODate("2017-02-08T22:05:02.055Z") }
onError
컬렉션에 구문 분석할 수 없는 날짜 문자열이 있는 문서가 포함된 경우 선택적 onError
매개변수에 집계 표현식을 제공하지 않으면 $dateFromString
에서 오류가 발생합니다.
예를 들어, 컬렉션 dates
에 다음 문서가 포함되어 있다고 가정해 보겠습니다.
{ "_id" : 1, "date" : "2017-02-08T12:10:40.787", timezone: "America/New_York" }, { "_id" : 2, "date" : "20177-02-09T03:35:02.055", timezone: "America/New_York" }
onError
매개변수를 사용하여 잘못된 날짜를 원래 문자열 형식으로 반환할 수 있습니다.
db.dates.aggregate( [ { $project: { date: { $dateFromString: { dateString: '$date', timezone: '$timezone', onError: '$date' } } } } ] )
이 경우 다음과 같은 문서가 반환됩니다.
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") } { "_id" : 2, "date" : "20177-02-09T03:35:02.055" }
onNull
컬렉션에 null
날짜 문자열을 포함한 문서가 포함된 경우, $dateFromString
은 선택적 onNull
매개 변수에 집계 표현식 을 제공하지 않는 한 null
을 반환합니다.
예를 들어, 컬렉션 dates
에 다음 문서가 포함되어 있다고 가정해 보겠습니다.
{ "_id" : 1, "date" : "2017-02-08T12:10:40.787", timezone: "America/New_York" }, { "_id" : 2, "date" : null, timezone: "America/New_York" }
onNull
매개변수를 사용하여 $dateFromString
이 null
대신 유닉스 시간을 나타내는 날짜를 반환하도록 할 수 있습니다.
db.dates.aggregate( [ { $project: { date: { $dateFromString: { dateString: '$date', timezone: '$timezone', onNull: new Date(0) } } } } ] )
이 경우 다음과 같은 문서가 반환됩니다.
{ "_id" : 1, "date" : ISODate("2017-02-08T17:10:40.787Z") } { "_id" : 2, "date" : ISODate("1970-01-01T00:00:00Z") }