정의
버전 5.0의 신규 항목입니다.
날짜를 자릅니다.
$dateTrunc 구문:
{ $dateTrunc: { date: <Expression>, unit: <Expression>, binSize: <Expression>, timezone: <tzExpression>, startOfWeek: <Expression> } }
필드 | 필수/선택 사항 | 설명 |
|---|---|---|
필수 사항 | ||
필수 사항 | 시간 단위로, 다음 문자열 중 하나로 해석되어야 하는 표현식으로 지정됩니다.
binSize와 unit은 | |
옵션 | 숫자로 된 시간 값으로, 0이 아닌 양수로 해석되어야 하는 표현식으로 지정됩니다. 기본값은 1입니다. binSize와 unit은 | |
옵션 |
시간대를 제공하지 않으면 | |
옵션 | 한 주의 시작입니다. 단위가 startOfWeek는 대소문자를 구분하지 않는 다음과 같은 문자열 중 하나로 리졸브되어야 하는 표현식입니다.
|
행동
다음과 같은 경우
null을 반환합니다.startOfWeek를 제외한 입력 필드 중 하나라도 누락되었거나
null로 설정하다 , 또는단위가
week이고 startOfWeek가 누락되었거나null로 설정하다 경우.
1583 이전 날짜에 역산 그레고리력을 사용합니다.
일광 절약 시간제를 고려하지만 윤초는 고려하지 않습니다.
binSize 및 unit 필드
binSize와 unit은 $dateTrunc 계산에 사용되는 기간을 지정합니다.
예를 들면 다음과 같습니다.
binSize가
1이고 단위가hour인 경우 기간은 1시간입니다. 날짜2021-03-20T11:30:05Z의 경우,$dateTrunc는2021-03-20T11:00:00Z을 반환합니다.binSize가
2이고 단위가hour인 경우 기간은 2시간입니다. 날짜2021-03-20T11:30:05Z의 경우,$dateTrunc는2021-03-20T10:00:00Z을 반환합니다.
$dateTrunc계산 시간을 지정된 시간 단위의 binSize 기간으로 나눕니다.기간은 단위별로 결정되는 기준 날짜부터 시작합니다.unit이 다음과 같은 경우:
week이외의 문자열,$dateTrunc는2000-01-01T00:00:00.00Z의 참조 날짜를 사용합니다. 예시 들어,binSize가10이고 단위가year인 경우 예시 기간은 다음과 같습니다.2000-01-01T00:00:00.00Z2010-01-01T00:00:00.00Z2020-01-01T00:00:00.00Z
week와 동일한$dateTrunc는2000-01-01보다 크거나 같은 주의 첫 번째 날로 설정하다 기준 날짜를 사용합니다. 첫 번째 날은 startOfWeek를 사용하여 설정하다 ( 기본값 은 일요일).
날짜가 속한 기간의 하한을 반환합니다. 경계는 ISODate 로 반환됩니다.binSize 필드 가
1인 경우,$dateTrunc은 반환된 ISODate 의 가장 덜 중요한 부분(unit 에 의해 결정됨)을0로 설정하고 나머지 ISODate 동일하게 유지합니다.
단위 가 다음과 같은 경우:
year:$dateTrunc은(는) date에 있는 연도의 1월 1 시작에 대한 ISODate 를 반환합니다.quarter:$dateTrunc은 date에서 분기의 첫 번째 날의 시작에 대한 ISODate 를 반환합니다.분기는 다음과 같습니다.
1월~3월
4월~6월
7월~9월
10월~12월
month:$dateTrunc은 date에서 해당 월의 첫 번째 날의 시작에 대한 ISODate 를 반환합니다.week:$dateTrunc은 date에서 startOfWeek의 시작에 대한 ISODate 를 반환합니다.startOfWeek의 기본값 일요일입니다.day:$dateTrunc은 date에서 하루의 시작에 대한 ISODate 반환합니다.hour:$dateTrunc은 date에서 시간의 시작에 대한 ISODate 반환합니다.minute:$dateTrunc은 date에서 분의 시작에 대한 ISODate 반환합니다.second:$dateTrunc은 date에서 초의 시작에 대한 ISODate 반환합니다.
unit 및 startOfWeek 필드
단위 가 다음과 같은 경우:
week이외의 문자열인startOfWeek는 무시됩니다.week과 동일하며 startOfWeek는 다음과 같습니다.지정됨:
$dateTrunc은 startOfWeek를 계산의 첫 번째 요일로 사용합니다.생략됨:
$dateTrunc는 계산 시 일요일을 주의 시작으로 사용합니다.
예시
캘리포니아주(CA)와 워싱턴주(WA)의 케이크 판매량이 포함된 cakeSales collection을 생성합니다.
db.cakeSales.insertMany( [ { _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"), state: "CA", price: 13, quantity: 120 }, { _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"), state: "WA", price: 14, quantity: 140 }, { _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"), state: "CA", price: 12, quantity: 145 }, { _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"), state: "WA", price: 13, quantity: 104 }, { _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"), state: "CA", price: 41, quantity: 162 }, { _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"), state: "WA", price: 43, quantity: 134 } ] )
다음 예시에서는 cakeSales 컬렉션이 사용됩니다.
$project 파이프라인 단계에서 주문 날짜 잘라내기
이 예시 에서는 $project 단계에서 $dateTrunc를 사용하여 케이크 판매 orderDate 값을 2주로 자릅니다.
db.cakeSales.aggregate( [ { $project: { _id: 1, orderDate: 1, truncatedOrderDate: { $dateTrunc: { date: "$orderDate", unit: "week", binSize: 2, timezone: "America/Los_Angeles", startOfWeek: "Monday" } } } } ] )
예시:
$project출력에_id,orderDate,truncatedOrderDate필드가 포함됩니다.$dateTruncstartOfWeek가Monday으로 설정하다America/Los_Angeles시간대에서orderDate필드2binSizeweek단위 기간으로 자릅니다.
이 예시 출력에서는 잘린 orderDate가 truncatedOrderDate 필드에 표시됩니다.
[ { _id: 0, orderDate: ISODate("2020-05-18T14:10:30.000Z"), truncatedOrderDate: ISODate("2020-05-11T07:00:00.000Z") }, { _id: 1, orderDate: ISODate("2021-03-20T11:30:05.000Z"), truncatedOrderDate: ISODate("2021-03-15T07:00:00.000Z") }, { _id: 2, orderDate: ISODate("2021-01-11T06:31:15.000Z"), truncatedOrderDate: ISODate("2021-01-04T08:00:00.000Z") }, { _id: 3, orderDate: ISODate("2020-02-08T13:13:23.000Z"), truncatedOrderDate: ISODate("2020-02-03T08:00:00.000Z") }, { _id: 4, orderDate: ISODate("2019-05-18T16:09:01.000Z"), truncatedOrderDate: ISODate("2019-05-13T07:00:00.000Z") }, { _id: 5, orderDate: ISODate("2019-01-08T06:12:03.000Z"), truncatedOrderDate: ISODate("2019-01-07T08:00:00.000Z") } ]
$group 파이프라인 단계에서 주문 날짜 잘라내기 및 수량 합계 가져오기
이 예시에서는 $dateTrunc $group orderDate quantity 단계에서를 사용하여 케이크 판매 값을 6개월로 자르고 값의 합계를 반환합니다.
db.cakeSales.aggregate( [ { $group: { _id: { truncatedOrderDate: { $dateTrunc: { date: "$orderDate", unit: "month", binSize: 6 } } }, sumQuantity: { $sum: "$quantity" } } } ] )
예시:
$group은(는)_id필드를truncatedOrderDate필드로 설정하여cakeSales문서를 그룹화하고$sum을 사용하여 각 그룹에 대한quantity값의 합계를 반환합니다.
이 예제의 출력에서는 잘린 orderDate이 truncatedOrderDate 필드에 표시되고 quantity 합계가 sumQuantity 필드에 표시됩니다.
[ { _id: { truncatedOrderDate: ISODate("2020-01-01T00:00:00.000Z") }, sumQuantity: 224 }, { _id: { truncatedOrderDate: ISODate("2021-01-01T00:00:00.000Z") }, sumQuantity: 285 }, { _id: { truncatedOrderDate: ISODate("2019-01-01T00:00:00.000Z") }, sumQuantity: 296 } ]