$week (aggregation)
Definition
Weeks begin on Sundays, and week 1 begins with the first Sundayof the year. Days preceding the first Sunday of the year are inweek 0. This behavior is the same as the “%U
” operator to thestrftime
standard library function.
The $week
expression has the followingoperator expression syntax:
- { $week: <dateExpression> }
Changed in version 3.6.
The argument must be a valid expression that resolves to one of the following:
New in version 3.6.
- { date: <dateExpression>, timezone: <tzExpression> }
FieldDescriptiondate
The date to which the operator is applied.<dateExpression>
must be a valid expression that resolves to aDate, aTimestamp,or an ObjectID.timezone
Optional.
The timezone of the operation result.<tzExpression>
must be a valid expression that resolves to a string formatted as eitheran Olson Timezone Identifier or aUTC Offset.If no timezone
is provided, the result is displayed in UTC
.
Format
Examples
Olson Timezone Identifier
- "America/New_York"
- "Europe/London"
- "GMT"
UTC Offset
- +/-[hh]:[mm], e.g. "+04:45"
- +/-[hh][mm], e.g. "-0530"
- +/-[hh], e.g. "+03"
Behavior
Example | Result |
---|---|
| 0 |
| 1 |
| 33 |
| 44 |
| 43 |
| error |
| error |
| error |
Note
$week
cannot take a string as an argument.
Example
Consider a sales
collection with the following document:
- {
- "_id" : 1,
- "item" : "abc",
- "price" : 10,
- "quantity" : 2,
- "date" : ISODate("2014-01-01T08:15:39.736Z")
- }
The following aggregation uses the $week
and otherdate operators to break down the date
field:
- db.sales.aggregate(
- [
- {
- $project:
- {
- year: { $year: "$date" },
- month: { $month: "$date" },
- day: { $dayOfMonth: "$date" },
- hour: { $hour: "$date" },
- minutes: { $minute: "$date" },
- seconds: { $second: "$date" },
- milliseconds: { $millisecond: "$date" },
- dayOfYear: { $dayOfYear: "$date" },
- dayOfWeek: { $dayOfWeek: "$date" },
- week: { $week: "$date" }
- }
- }
- ]
- )
The operation returns the following result:
- {
- "_id" : 1,
- "year" : 2014,
- "month" : 1,
- "day" : 1,
- "hour" : 8,
- "minutes" : 15,
- "seconds" : 39,
- "milliseconds" : 736,
- "dayOfYear" : 1,
- "dayOfWeek" : 4,
- "week" : 0
- }