These accumulators help find the smallest or largest value in a group of data. They make it easy to get minimum or maximum values from many records.
$min and $max accumulators in MongoDB
Introduction
Syntax
MongoDB
db.collection.aggregate([
{
$group: {
_id: null,
minValue: { $min: "$fieldName" },
maxValue: { $max: "$fieldName" }
}
}
])Use $min to get the smallest value and $max to get the largest value.
The $group stage groups documents; _id: null means all documents are grouped together.
Examples
MongoDB
db.sales.aggregate([
{
$group: {
_id: null,
minPrice: { $min: "$price" },
maxPrice: { $max: "$price" }
}
}
])MongoDB
db.students.aggregate([
{
$group: {
_id: "$class",
minScore: { $min: "$score" },
maxScore: { $max: "$score" }
}
}
])Sample Program
This example inserts some products with prices, then finds the lowest and highest price among them.
MongoDB
db.products.insertMany([
{ name: "Pen", price: 1.5 },
{ name: "Notebook", price: 3.0 },
{ name: "Eraser", price: 0.5 },
{ name: "Pencil", price: 1.0 }
])
db.products.aggregate([
{
$group: {
_id: null,
minPrice: { $min: "$price" },
maxPrice: { $max: "$price" }
}
}
])Important Notes
If the field contains non-numeric values, $min and $max will compare them based on BSON order.
Using _id: null groups all documents together; use a field name to group by categories.
Summary
$min finds the smallest value in a group.
$max finds the largest value in a group.
They are used inside the $group stage of aggregation.
Practice
1. What do the
$min and $max accumulators do in a MongoDB aggregation pipeline?easy
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]
Hint: Remember: min = smallest, max = largest value [OK]
Common Mistakes:
- Confusing
$minand$maxwith average functions - Thinking they return documents instead of values
- Mixing accumulators with sorting operators
2. Which of the following is the correct syntax to use
$max in a $group stage to find the highest score from a field named score?easy
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]
Hint: Always prefix field names with $ and use quotes inside accumulators [OK]
Common Mistakes:
- Omitting $ before accumulator name
- Not quoting the field name with $
- Using field name without $ or quotes
3. Given the collection documents:
What will be the output of this aggregation?
{ "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" } } }]medium
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]
Hint: Scan values, pick smallest for $min and largest for $max [OK]
Common Mistakes:
- Mixing up min and max values
- Assuming $min or $max returns documents instead of values
- Forgetting to use $ before field names
4. Consider this aggregation pipeline:
What is the error in this pipeline?
[{ $group: { _id: "$category", minPrice: { $min: price }, maxPrice: { $max: "$price" } } }]What is the error in this pipeline?
medium
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]
Hint: Always quote and prefix field names with $ inside accumulators [OK]
Common Mistakes:
- Omitting $ before field names inside accumulators
- Thinking $min and $max cannot be used together
- Misunderstanding _id field usage in $group
5. You have a collection of sales documents with fields
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?hard
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]
Hint: Filter after grouping to use aggregated fields in conditions [OK]
Common Mistakes:
- Filtering before grouping, which filters documents not groups
- Trying to filter inside $group stage incorrectly
- Filtering on maxSale instead of minSale
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
