What if you could find the smallest and largest values in your data instantly, without any manual searching?
Why $min and $max accumulators in MongoDB? - Purpose & Use Cases
Imagine you have a huge list of sales records in a spreadsheet, and you want to find the smallest and largest sale amounts manually.
You scroll through thousands of rows, trying to spot the lowest and highest numbers by eye.
This manual search is slow and tiring.
You might miss the smallest or largest value because it's easy to overlook numbers in a big list.
Also, if the data changes, you have to do the whole search again.
The $min and $max accumulators in MongoDB automatically find the smallest and largest values in your data.
They scan all records quickly and give you the answer without any manual effort.
Look through each sale amount in the list and remember the smallest and largest values found so far.
db.sales.aggregate([{ $group: { _id: null, minSale: { $min: "$amount" }, maxSale: { $max: "$amount" } } }])It lets you instantly find minimum and maximum values in large datasets, saving time and avoiding mistakes.
A store manager wants to know the smallest and largest daily sales from thousands of transactions to understand sales performance extremes.
Manually finding min and max is slow and error-prone.
$min and $max do this automatically and accurately.
They help analyze big data quickly and reliably.
Practice
$min and $max accumulators do in a MongoDB aggregation pipeline?Solution
Step 1: Understand the purpose of
$minand$max$minreturns the smallest value from the grouped documents, while$maxreturns the largest value.Step 2: Compare with other options
The other options describe different operations like average, first/last document, or sorting, which are not what$minand$maxdo.Final Answer:
$minfinds the smallest value and$maxfinds the largest value in a group. -> Option DQuick Check:
$min= smallest,$max= largest [OK]
- Confusing
$minand$maxwith average functions - Thinking they return documents instead of values
- Mixing accumulators with sorting operators
$max in a $group stage to find the highest score from a field named score?Solution
Step 1: Check the correct use of
The correct syntax requires$maxaccumulator$maxas the operator and the field name as a string with a $ prefix inside quotes: "$score".Step 2: Identify syntax errors in other options
{ $group: { _id: null, maxScore: { max: "$score" } } } misses the $ before max, { $group: { _id: null, maxScore: { $max: score } } } lacks quotes around field name, and { $group: { _id: null, maxScore: { $max: "score" } } } uses quotes without $ prefix, all invalid.Final Answer:
{ $group: { _id: null, maxScore: { $max: "$score" } } } -> Option AQuick Check:
Use$max: "$field"syntax [OK]
- Omitting $ before accumulator name
- Not quoting the field name with $
- Using field name without $ or quotes
{ "name": "Alice", "score": 85 }, { "name": "Bob", "score": 92 }, { "name": "Charlie", "score": 78 }What will be the output of this aggregation?
[{ $group: { _id: null, minScore: { $min: "$score" }, maxScore: { $max: "$score" } } }]Solution
Step 1: Identify minimum and maximum scores from documents
The scores are 85, 92, and 78. The smallest is 78 and the largest is 92.Step 2: Understand the aggregation output
The$groupstage groups all documents (_id: null) and calculatesminScoreas 78 andmaxScoreas 92.Final Answer:
{ "_id": null, "minScore": 78, "maxScore": 92 } -> Option BQuick Check:
Min = 78, Max = 92 [OK]
- Mixing up min and max values
- Assuming $min or $max returns documents instead of values
- Forgetting to use $ before field names
[{ $group: { _id: "$category", minPrice: { $min: price }, maxPrice: { $max: "$price" } } }]What is the error in this pipeline?
Solution
Step 1: Check syntax of
The$minand$maxusage$minaccumulator usespricewithout quotes and $ prefix, which is incorrect. It should be "$price".Step 2: Verify other parts of the pipeline
$maxis correctly used with "$price". Grouping by "$category" is valid. Using both accumulators together is allowed.Final Answer:
Field name 'price' in $min is missing quotes and $ prefix. -> Option AQuick Check:
Field names need "$" prefix inside accumulators [OK]
- Omitting $ before field names inside accumulators
- Thinking $min and $max cannot be used together
- Misunderstanding _id field usage in $group
region and amount. You want to find the smallest and largest sale amounts per region, but only for regions where the smallest sale is above 100. Which aggregation pipeline correctly achieves this?Solution
Step 1: Group by region and calculate min and max sales
The$groupstage groups documents byregionand calculatesminSaleandmaxSaleusing$minand$maxonamount.Step 2: Filter groups where minSale is greater than 100
The$matchstage after grouping filters groups whereminSaleis greater than 100, exactly as required.Final Answer:
[{ $group: { _id: "$region", minSale: { $min: "$amount" }, maxSale: { $max: "$amount" } } }, { $match: { minSale: { $gt: 100 } } }] -> Option CQuick Check:
Group first, then filter on aggregated minSale [OK]
- Filtering before grouping, which filters documents not groups
- Trying to filter inside $group stage incorrectly
- Filtering on maxSale instead of minSale
Ready to prove it?
Pass the test and this pattern moves unknown
