정의
버전 5.0의 신규 항목입니다.
날짜를 자릅니다.
$dateTrunc 구문:
{ $dateTrunc: { date: <Expression>, unit: <Expression>, binSize: <Expression>, timezone: <tzExpression>, startOfWeek: <Expression> } }
필드 | 필수/선택 사항 | 설명 | ||||||
|---|---|---|---|---|---|---|---|---|
필수 사항 | ||||||||
필수 사항 | 시간 단위로, 다음 문자열 중 하나로 해석되어야 하는 표현식으로 지정됩니다.
binSize와 unit을 함께 사용하여 계산에 | |||||||
옵션 | 숫자로 된 시간 값으로, 0이 아닌 양수로 해석되어야 하는 표현식으로 지정됩니다. 기본값은 1입니다. binSize와 unit을 함께 사용하여 계산에 | |||||||
옵션 | 계산의 표준 시간대는 다음 값 표준 시간대를 제공하지 않으면 계산은 UTC로 수행됩니다.
| |||||||
옵션 | 한 주의 시작입니다. startOfWeek는 대소문자를 구분하지 않는 다음과 같은 문자열 중 하나로 리졸브되어야 하는 표현식입니다.
|
행동
다음과 같은 경우
null을 반환합니다.startOfWeek를 제외한 입력 필드 중 하나라도 누락되었거나(으)로 설정하다
null, 또는unit이
week이고 startOfWeek가 누락되었거나 로 설정하다null경우.
일광 절약 시간제를 고려하지만 윤초는 고려하지 않습니다.
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 기간으로 나눕니다.시간의 기간은 기준 일자부터 시작하며, 이는 단위에 의해 결정됩니다. 단위 가 다음과 같은 경우:
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경우, 은 반환된$dateTruncISODate 에서 가장 덜 중요한 부분( unit 에 의해 결정됨)을0로 설정하고 나머지 ISODate 동일하게 유지합니다.
단위 가 다음과 같은 경우:
year: 는$dateTruncdate에 있는 1 연도에 대해 1월 시작에 대한 ISODate 반환합니다.quarter: 는 date에서 분기의 첫$dateTrunc번째 날의 시작에 대한 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: 는 date에서 분의$dateTrunc시작에 대한 ISODate 반환합니다.second: 는 date에서 초의$dateTrunc시작에 대한 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 파이프라인 단계에서 주문 날짜 잘라내기
이 예시 단계에서 를 사용하여 케이크 $dateTrunc $project 판매 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필드가 포함됩니다.
이 예시 출력에서는 잘린 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 값을 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 } ]