$dateFromParts (집계)
정의
$dateFromParts
날짜의 구성 속성이 주어지면 데이터 객체를 생성하고 반환합니다.
$dateFromParts
표현식의 구문은 다음과 같습니다.{ $dateFromParts : { 'year': <year>, 'month': <month>, 'day': <day>, 'hour': <hour>, 'minute': <minute>, 'second': <second>, 'millisecond': <ms>, 'timezone': <tzExpression> } } ISO 주 날짜 에 구성 날짜 필드를 지정할 수도 있습니다. 다음 구문을 사용하여 형식을 지정합니다.
{ $dateFromParts : { 'isoWeekYear': <year>, 'isoWeek': <week>, 'isoDayOfWeek': <day>, 'hour': <hour>, 'minute': <minute>, 'second': <second>, 'millisecond': <ms>, 'timezone': <tzExpression> } } $dateFromParts
는 다음 필드가 포함된 문서를 사용합니다.중요
$dateFromParts
입력 문서를 구성할 때 달력 날짜와 ISO 주 날짜 필드를 결합할 수는 없습니다.필드필수/선택 사항설명year
다음을 사용하지 않는 경우 필수isoWeekYear
연도입니다. 숫자로 평가되는 모든 표현식 일 수 있습니다.
값 범위:
지정된 숫자가 이 범위 를 벗어나면1
~9999
$dateFromParts
오류가 발생합니다. 이 값의 하한은1
입니다.isoWeekYear
다음을 사용하지 않는 경우 필수year
ISO 주 날짜 연도 숫자로 평가되는 모든 표현식이 될 수 있습니다.
값 범위:
지정된 숫자가 이 범위 를 벗어나면1
~9999
$dateFromParts
오류가 발생합니다. 이 값의 하한은1
입니다.month
선택 사항year
에서만 사용할 수 있습니다.월입니다. 숫자로 평가되는 모든 표현식이 될 수 있습니다.
기본값은
1
입니다.값 범위:
지정된 숫자가 이 범위 를 벗어나면1
~12
$dateFromParts
는 날짜 계산에 차이를 포함합니다. 예제는 값 범위 를 참조하세요.isoWeek
선택 사항isoWeekYear
에서만 사용할 수 있습니다.연도의 주입니다. 숫자로 평가되는 모든 표현식이 될 수 있습니다.
기본값은
1
입니다.값 범위:
지정된 숫자가 이 범위 를 벗어나면1
~53
$dateFromParts
는 날짜 계산에 차이를 포함합니다. 예제는 값 범위 를 참조하세요.day
선택 사항year
에서만 사용할 수 있습니다.날짜 숫자로 평가되는 모든 표현식이 될 수 있습니다.
기본값은
1
입니다.값 범위:
지정된 숫자가 이 범위 를 벗어나면1
~31
$dateFromParts
는 날짜 계산에 차이를 포함합니다. 예제는 값 범위 를 참조하세요.isoDayOfWeek
선택 사항isoWeekYear
에서만 사용할 수 있습니다.요일(월요일
1
- 일요일7
)입니다. 숫자로 평가되는 모든 표현식이 될 수 있습니다.기본값은
1
입니다.값 범위:
지정된 숫자가 이 범위 를 벗어나면1
~7
$dateFromParts
는 날짜 계산에 차이를 포함합니다. 예제는 값 범위 를 참조하세요.hour
옵션시간 숫자로 평가되는 모든 표현식이 될 수 있습니다.
기본값은
0
입니다.값 범위:
지정된 숫자가 이 범위 를 벗어나면0
~23
$dateFromParts
는 날짜 계산에 차이를 포함합니다. 예제는 값 범위 를 참조하세요.minute
옵션분. 숫자로 평가되는 모든 표현식이 될 수 있습니다.
기본값은
0
입니다.값 범위:
0
~59
지정된 숫자가 이 범위를 벗어나면$dateFromParts
는 날짜 계산에 차이를 포함합니다. 예시는 값 범위를 참조하세요.second
옵션초 숫자로 평가되는 모든 표현식이 될 수 있습니다.
기본값은
0
입니다.값 범위:
지정된 숫자가 이 범위 를 벗어나면0
~59
$dateFromParts
는 날짜 계산에 차이를 포함합니다. 예제는 값 범위 를 참조하세요.millisecond
옵션밀리초 숫자로 평가되는 모든 표현식이 될 수 있습니다.
기본값은
0
입니다.값 범위:
지정된 숫자가 이 범위 를 벗어나면0
~999
$dateFromParts
는 날짜 계산에 차이를 포함합니다. 예제는 값 범위 를 참조하세요.timezone
옵션<timezone>
값이 다음 중 하나인 문자열로 계산되는 모든 표현식이 될 수 있습니다.Olson Timezone Identifier(예:
"Europe/London"
또는"America/New_York"
) 또는형식의 UTC 오프셋입니다.
+/-[hh]:[mm]
, 예:"+04:45"
, 또는+/-[hh][mm]
, 예:"-0530"
, 또는+/-[hh]
, e.g."+03"
.
표현식에 대한 자세한 내용은 표현식 연산자를 참조하세요.
행동
값 범위
year
및 isoWeekYear
에 지원되는 값 범위는 1-9999
입니다.
year
, isoWeekYear
및 timezone
이외의 필드에 지정된 값이 유효 범위를 벗어나는 경우 $dateFromParts
은(는) 다른 날짜 부분과의 차이를 포함하거나 빼서 날짜를 계산합니다.
값이 범위보다 큰 경우
month
필드 값이 최대값 12개월(또는 1년)보다 2개월 큰 14
인 다음 $dateFromParts
표현식을 가정해 보겠습니다.
{ $dateFromParts: { 'year' : 2017, 'month' : 14, 'day': 1, 'hour' : 12 } }
표현식은 year
를 1씩 줄이고 month
를 2로 설정하여 날짜를 계산하고 다음을 반환합니다.
ISODate("2018-02-01T12:00:00Z")
값이 범위보다 작은 경우
month
필드 값이 최소값인 1개월보다 1개월 작은 0
인 다음 $dateFromParts
표현식을 고려하세요.
{ $dateFromParts: { 'year' : 2017, 'month' : 0, 'day': 1, 'hour' : 12 } }
표현식은 year
을(를) 1씩 줄이고 month
을(를) 12로 설정하여 날짜를 계산하여 다음을 반환합니다.
ISODate("2016-12-01T12:00:00Z")
시간대
<timezone>
필드에서 Olson 표준 시간대 ID를 사용할 때 MongoDB는 지정된 시간대에 적용 가능한 경우 DST 오프셋을 적용합니다.
예를 들어 sales
다음 문서가 있는 컬렉션을 생각해 보겠습니다.
{ "_id" : 1, "item" : "abc", "price" : 20, "quantity" : 5, "date" : ISODate("2017-05-20T10:24:51.303Z") }
다음 집계는 MongoDB가 Olson 시간대 식별자에 대한 DST 오프셋을 처리하는 방법을 보여 줍니다. 이 예시에서는 $hour
및 $minute
연산자를 사용하여 date
필드의 해당 부분을 반환합니다.
db.sales.aggregate([ { $project: { "nycHour": { $hour: { date: "$date", timezone: "-05:00" } }, "nycMinute": { $minute: { date: "$date", timezone: "-05:00" } }, "gmtHour": { $hour: { date: "$date", timezone: "GMT" } }, "gmtMinute": { $minute: { date: "$date", timezone: "GMT" } }, "nycOlsonHour": { $hour: { date: "$date", timezone: "America/New_York" } }, "nycOlsonMinute": { $minute: { date: "$date", timezone: "America/New_York" } } } }])
이 연산은 다음과 같은 결과를 반환합니다.
{ "_id": 1, "nycHour" : 5, "nycMinute" : 24, "gmtHour" : 10, "gmtMinute" : 24, "nycOlsonHour" : 6, "nycOlsonMinute" : 24 }
예시
다음 집계는 $dateFromParts
(을)를 사용하여 제공된 입력 필드에서 날짜 객체를 세 개 구성합니다.
db.sales.aggregate([ { $project: { date: { $dateFromParts: { 'year' : 2017, 'month' : 2, 'day': 8, 'hour' : 12 } }, date_iso: { $dateFromParts: { 'isoWeekYear' : 2017, 'isoWeek' : 6, 'isoDayOfWeek' : 3, 'hour' : 12 } }, date_timezone: { $dateFromParts: { 'year' : 2016, 'month' : 12, 'day' : 31, 'hour' : 23, 'minute' : 46, 'second' : 12, 'timezone' : 'America/New_York' } } } }])
이 연산은 다음과 같은 결과를 반환합니다.
{ "_id" : 1, "date" : ISODate("2017-02-08T12:00:00Z"), "date_iso" : ISODate("2017-02-08T12:00:00Z"), "date_timezone" : ISODate("2017-01-01T04:46:12Z") }