dateTrunc(집계)
정의
버전 5.0에 추가.
날짜를 자릅니다.
$dateTrunc
구문:
{ $dateTrunc: { date: <Expression>, unit: <Expression>, binSize: <Expression>, timezone: <tzExpression>, startOfWeek: <Expression> } }
필드 | 필수/선택 사항 | 설명 | ||||||
---|---|---|---|---|---|---|---|---|
필수 사항 | ||||||||
필수 사항 | 시간 단위로, 다음 문자열 중 하나로 해석되어야 하는 표현식으로 지정됩니다.
binSize와 유닛과 함께 | |||||||
옵션 | 숫자로 된 시간 값으로, 0이 아닌 양수로 해석되어야 하는 표현식으로 지정됩니다. 기본값은 1입니다. binSize와 유닛과 함께 | |||||||
옵션 |
시간대를 제공하지 않으면
| |||||||
옵션 | 한 주의 시작입니다. 단위가 startOfWeek는 대소문자를 구분하지 않는 다음과 같은 문자열 중 하나로 리졸브되어야 하는 표현식입니다.
|
행동
다음과 같은 경우
null
을 반환합니다.startOfWeek를 제외한 입력 필드 중 하나라도 누락되었거나
null
로 설정된 경우 또는unit 이
week
이고 startOfWeek가 누락되었거나null
로 설정된 경우.
1583년 이전 날짜에 대해 1583년 이전 그레고리안 달력을 사용합니다.
일광 절약 시간제를 고려하지만 윤초는 고려하지 않습니다.
binSize
및 필드 unit
binSize와 유닛과 함께 $dateTrunc
계산에 사용되는 기간을 지정합니다.
예를 들면 다음과 같습니다.
binSize 가
1
이고 단위가hour
인 경우 기간은 1시간입니다. 날짜의 경우2021-03-20T11:30:05Z
,$dateTrunc
는2021-03-20T11:00:00Z
를 반환합니다.binSize가
2
이고 unit이hour
인 경우 기간은 2시간입니다. date2021-03-20T11:30:05Z
의 경우$dateTrunc
는2021-03-20T10:00:00Z
를 반환합니다.
$dateTrunc
계산 시간을 지정된 시간 유닛의 BinSize 기간으로 나눕니다.시간의 기간은 기준 일자부터 시작하며, 이는 단위에 의해 결정됩니다. 단위 가 다음과 같은 경우:
week
이외의 문자열인 경우,$dateTrunc
는2000-01-01T00:00:00.00Z
의 참고 날짜를 사용합니다. 예를 들어 binSize가10
이고 unit이year
인 경우 기간 예시는 다음과 같습니다.2000-01-01T00:00:00.00Z
2010-01-01T00:00:00.00Z
2020-01-01T00:00:00.00Z
week
와 같은 경우,$dateTrunc
는2000-01-01
또는 이후인 주의 첫 번째 날로 설정된 참조 날짜를 사용합니다. 첫 번째 날은 startOfWeek를 사용하여 설정합니다(기본값: 일요일).
날짜가 속한 기간의 하한을 반환합니다. 경계는 ISODate로 반환됩니다. binSize 필드가
1
인 경우,$dateTrunc
는 반환된 ISODate에서 가장 덜 중요한 부분(단위에 의해 결정)을0
으로 설정하고 나머지 ISODate를 동일하게 유지합니다.
단위 가 다음과 같은 경우:
year
:$dateTrunc
은 date에 있는 연도에 대해 1 1월 시작에 대한 ISODate 를 반환합니다 .quarter
:$dateTrunc
는 date에서 분기의 첫 번째 날의 시작에 대한 ISODate를 반환합니다.분기는 다음과 같습니다.
1월~3월
4월~6월
7월~9월
10월~12월
month
:$dateTrunc
(은)는 해당 월의 첫 시작 날짜에 대한 IsoDate를 반환합니다.week
:$dateTrunc
는 startOfWeek의 날짜의 시작으로 ISODate를 반환합니다. startOfWeek의 기본값은 일요일입니다.day
:$dateTrunc
는 date에서 시작 날짜에 대한 ISODate를 반환합니다hour
:$dateTrunc
는 날짜의 시간 시작으로 ISODate를 반환합니다.minute
:$dateTrunc
는 날짜의 분(minute) 시작에 대한 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
필드가 포함됩니다.$dateTrunc
orderDate
필드를 StartOfWeek가Monday
로 설정된America/Los_Angeles
시간대의2
binSizeweek
단위 시간으로 자릅니다.
이 예시 출력에서는 잘린 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
및 수량 합계 가져오기
이 예시에서는 $group
단계에서 $dateTrunc
를 사용하여 케이크 판매 orderDate
값을 6개월로 자르고 quantity
값의 합계를 반환합니다.
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 } ]