What if you could instantly pull out the year or month from any date in your data with just one simple command?
Why Date expressions ($year, $month, $dayOfMonth) in MongoDB? - Purpose & Use Cases
Imagine you have a big list of events with full timestamps, and you want to find out how many happened in a specific year or month. Doing this by hand means opening each event, reading the date, and writing down the year or month separately.
Manually checking each date is slow and tiring. It's easy to make mistakes, like mixing up months or forgetting leap years. Also, if you have thousands of events, this becomes impossible to do quickly or accurately.
Date expressions like $year, $month, and $dayOfMonth let you automatically pull out parts of a date inside your database queries. This means you can quickly group, filter, or sort events by year, month, or day without extra work.
for event in events: year = extract_year_manually(event.date) if year == 2023: count += 1
db.events.aggregate([
{ $match: { $expr: { $eq: [{ $year: "$date" }, 2023] } } }
])You can instantly analyze and organize your data by any part of the date, making time-based insights easy and fast.
A store owner wants to see how many sales happened each month this year. Using $month, they can group sales by month and spot busy or slow times without manual counting.
Manually extracting date parts is slow and error-prone.
$year, $month, and $dayOfMonth automate date part extraction inside queries.
This makes filtering and grouping by date fast and reliable.
Practice
{$year: "$dateField"} return when used in an aggregation pipeline?Solution
Step 1: Understand the
The$yearoperator$yearexpression extracts the year component from a date value.Step 2: Apply to the field
UsingdateField{$year: "$dateField"}returns the year number from the date stored indateField.Final Answer:
The year part of the date stored in dateField -> Option BQuick Check:
$yearextracts year [OK]
- Confusing $year with $month or $dayOfMonth
- Expecting a full date string instead of just the year
- Using $year outside aggregation pipeline
createdAt in a MongoDB aggregation pipeline?Solution
Step 1: Identify correct field reference syntax
In MongoDB aggregation, field names must be referenced as strings with a $ prefix, like "$createdAt".Step 2: Confirm correct operator usage
The operator to extract month is$month, so the correct syntax is{ $month: "$createdAt" }.Final Answer:
{ $month: "$createdAt" } -> Option AQuick Check:
Field names need "$" prefix in aggregation [OK]
- Omitting quotes and $ prefix around field name
- Using operator without $ sign
- Passing field name as plain string without $
dateField value of ISODate("2023-07-15T10:00:00Z")?
{ $project: { year: { $year: "$dateField" }, month: { $month: "$dateField" }, day: { $dayOfMonth: "$dateField" } } }Solution
Step 1: Extract year, month, and day from the date
The date is July 15, 2023. So, year = 2023, month = 7 (July), day = 15.Step 2: Confirm output matches extracted values
The output document will have year: 2023, month: 7, day: 15 as projected.Final Answer:
{ year: 2023, month: 7, day: 15 } -> Option CQuick Check:
Date parts match output [OK]
- Assuming months start at 0 instead of 1
- Confusing dayOfMonth with dayOfWeek
- Misreading the date value
orderDate:
{ $project: { day: { $dayOfMonth: orderDate } } }
But it throws an error. What is the mistake?Solution
Step 1: Check field reference syntax inside
Field names must be referenced as strings with a $ prefix, so it should be "$orderDate".$dayOfMonthStep 2: Identify the cause of error
UsingorderDatewithout quotes and $ causes a syntax error in aggregation.Final Answer:
Missing quotes and $ before field name in $dayOfMonth -> Option AQuick Check:
Field names need "$" prefix in aggregation [OK]
- Forgetting $ and quotes around field names
- Assuming $day is a valid operator
- Confusing aggregation stages
saleDate field. Which aggregation pipeline stage correctly groups by year and month using date expressions?Solution
Step 1: Use correct field references with $year and $month
Field names must be referenced as strings with $ prefix, so "$saleDate" is correct.Step 2: Verify grouping keys and sum operator
Grouping by year and month extracted fromsaleDateand summingamountis done correctly in { $group: { _id: { year: { $year: "$saleDate" }, month: { $month: "$saleDate" } }, totalSales: { $sum: "$amount" } } }.Final Answer:
{ $group: { _id: { year: { $year: "$saleDate" }, month: { $month: "$saleDate" } }, totalSales: { $sum: "$amount" } } } -> Option DQuick Check:
Correct field references and operators used [OK]
- Using field names without $ and quotes
- Mixing string field names with expressions
- Incorrectly mixing aggregation operators
Ready to prove it?
Pass the test and this pattern moves unknown
