문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
dateTrunc(집계)
정의
버전 5.0에 추가.
날짜를 자릅니다.
$dateTrunc
구문:
{ $dateTrunc: { date: <Expression>, unit: <Expression>, binSize: <Expression>, timezone: <tzExpression>, startOfWeek: <Expression> } }
필드 | 필수/선택 사항 | 설명 | ||||||
---|---|---|---|---|---|---|---|---|
필수 사항 | 잘라낼 날짜로, UTC로 지정됩니다.날짜 는 Date ,Timestamp 또는 ObjectID 로 확인되는 모든 표현식 이 될 수 있습니다. | |||||||
필수 사항 | 시간 단위로, 다음 문자열 중 하나로 해석되어야 하는 표현식으로 지정됩니다.
binSize 와 unit 은 | |||||||
옵션 | 숫자로 된 시간 값으로, 0이 아닌 양수로 해석되어야 하는 표현식으로 지정됩니다. 기본값은 1입니다. binSize 와 unit 은 | |||||||
옵션 |
표준 시간대 를 제공하지 않으면
| |||||||
옵션 | 한 주의 시작입니다. 단위 가 startOfWeek 는 대소문자를 구분하지 않는 다음 문자열 중 하나로 해석되어야 하는 표현식 입니다.
|
행동
다음과 같은 경우
null
을 반환합니다.startOfWeek 를 제외한 입력 필드 중 하나라도 누락되었거나
null
로 설정된 경우, 또는unit 이
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.00Z
2010-01-01T00:00:00.00Z
2020-01-01T00:00:00.00Z
week
와 같으면 {$dateTrunc
} 는2000-01-01
보다 크거나 같은 주의 첫 번째 날로 설정된 참조 날짜를 사용합니다. 첫 번째 날은 startOfWeek 를 사용하여 설정합니다(기본값은 일요일).
날짜 가 속한 기간의 하한을 반환합니다. 경계는 ISODate 로 반환됩니다. binSize 필드가 인
1
경우, 는 반환 된$dateTrunc
ISODate 의 가장 덜 중요한 부분( unit 에 의해 결정됨)을0
로 설정하고 나머지 ISODate 를 동일하게 유지합니다.
unit 이 다음과 같은 경우:
year
:$dateTrunc
은 date에 있는 연도에 대해 1 1월 시작에 대한 ISODate 를 반환합니다 .quarter
:$dateTrunc
은 date에서 분기의 첫 번째 날의 시작에 대한 ISODate 를 반환합니다 .분기는 다음과 같습니다.
1월~3월
4월~6월
7월~9월
10월~12월
month
:$dateTrunc
은 date에서 해당 월의 첫 번째 날 시작에 대한 ISODate 를 반환합니다 .week
: 은 startOfWeek 시작$dateTrunc
날짜 에 대한 ISODate 를 반환합니다.startOfWeek 의 기본값은 일요일입니다.day
:$dateTrunc
은 date에서 하루의 시작에 대한 ISODate 를 반환합니다 .hour
:$dateTrunc
은 date에서 시간 시작에 대한 ISODate 를 반환합니다 .minute
:$dateTrunc
은 date에서 분의 시작에 대한 ISODate 를 반환합니다 .second
:$dateTrunc
은 date에서 초의 시작에 대한 ISODate 를 반환합니다 .
unit
및 startOfWeek
필드
unit 이 다음과 같은 경우:
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
필드가 포함됩니다.$dateTrunc
startOfWeek 가 로 설정된 시간대 에서orderDate
필드를2
binSizeweek
America/Los_Angeles
단위 기간으로 자릅니다.Monday
이 예시 출력에서는 잘린 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 } ]