Accumulators API¶
This page documents all accumulator classes used with the $group stage.
Basic Accumulators¶
Sum
¶
Bases: Accumulator
$sum accumulator - sums numeric values.
Example
Sum(name="totalQuantity", field="quantity").model_dump() {"totalQuantity": {"$sum": "$quantity"}}
Sum(name="count", value=1).model_dump() {"count": {"$sum": 1}}
Source code in mongo_aggro/accumulators.py
Avg
¶
Bases: Accumulator
$avg accumulator - calculates average of numeric values.
Example
Avg(name="avgPrice", field="price").model_dump() {"avgPrice": {"$avg": "$price"}}
Source code in mongo_aggro/accumulators.py
Min
¶
Bases: Accumulator
$min accumulator - returns minimum value.
Example
Min(name="minPrice", field="price").model_dump() {"minPrice": {"$min": "$price"}}
Source code in mongo_aggro/accumulators.py
Max
¶
Bases: Accumulator
$max accumulator - returns maximum value.
Example
Max(name="maxPrice", field="price").model_dump() {"maxPrice": {"$max": "$price"}}
Source code in mongo_aggro/accumulators.py
First
¶
Bases: Accumulator
$first accumulator - returns first value in group.
Example
First(name="firstItem", field="item").model_dump() {"firstItem": {"$first": "$item"}}
Source code in mongo_aggro/accumulators.py
Last
¶
Bases: Accumulator
$last accumulator - returns last value in group.
Example
Last(name="lastItem", field="item").model_dump() {"lastItem": {"$last": "$item"}}
Source code in mongo_aggro/accumulators.py
Array Accumulators¶
Push
¶
Bases: Accumulator
$push accumulator - creates array of values.
Example
Push(name="items", field="item").model_dump() {"items": {"$push": "$item"}}
Push( name="details", expression={"name": "$name", "qty": "$qty"} ).model_dump() {"details": {"$push": {"name": "$name", "qty": "$qty"}}}
Source code in mongo_aggro/accumulators.py
AddToSet
¶
Bases: Accumulator
$addToSet accumulator - creates array of unique values.
Example
AddToSet(name="uniqueTags", field="tag").model_dump() {"uniqueTags": {"$addToSet": "$tag"}}
Source code in mongo_aggro/accumulators.py
Statistical Accumulators¶
StdDevPop
¶
Bases: Accumulator
$stdDevPop accumulator - population standard deviation.
Example
StdDevPop(name="stdDev", field="score").model_dump() {"stdDev": {"$stdDevPop": "$score"}}
Source code in mongo_aggro/accumulators.py
StdDevSamp
¶
Bases: Accumulator
$stdDevSamp accumulator - sample standard deviation.
Example
StdDevSamp(name="stdDevSample", field="score").model_dump() {"stdDevSample": {"$stdDevSamp": "$score"}}
Source code in mongo_aggro/accumulators.py
Count Accumulator¶
Count_
¶
Bases: Accumulator
$count accumulator - counts documents in group (MongoDB 5.0+).
Example
Count_(name="totalDocs").model_dump() {"totalDocs": {"$count": {}}}
Source code in mongo_aggro/accumulators.py
Object Accumulators¶
MergeObjects
¶
Bases: Accumulator
$mergeObjects accumulator - merges documents into single document.
Example
MergeObjects(name="merged", field="details").model_dump() {"merged": {"$mergeObjects": "$details"}}
Source code in mongo_aggro/accumulators.py
N-Value Accumulators¶
TopN
¶
Bases: Accumulator
$topN accumulator - returns top N elements (MongoDB 5.2+).
Example
TopN( ... name="top3", ... n=3, ... sort_by={"score": -1}, ... output="$item" ... ).model_dump() { "top3": { "$topN": {"n": 3, "sortBy": {"score": -1}, "output": "$item"} } }
Source code in mongo_aggro/accumulators.py
BottomN
¶
Bases: Accumulator
$bottomN accumulator - returns bottom N elements (MongoDB 5.2+).
Example
BottomN( ... name="bottom3", ... n=3, ... sort_by={"score": -1}, ... output="$item" ... ).model_dump() { "bottom3": { "$bottomN": {"n": 3, "sortBy": {"score": -1}, "output": "$item"} } }
Source code in mongo_aggro/accumulators.py
FirstN
¶
Bases: Accumulator
$firstN accumulator - returns first N elements (MongoDB 5.2+).
Example
FirstN(name="first3", n=3, input="$item").model_dump() {"first3": {"$firstN": {"n": 3, "input": "$item"}}}
Source code in mongo_aggro/accumulators.py
LastN
¶
Bases: Accumulator
$lastN accumulator - returns last N elements (MongoDB 5.2+).
Example
LastN(name="last3", n=3, input="$item").model_dump() {"last3": {"$lastN": {"n": 3, "input": "$item"}}}
Source code in mongo_aggro/accumulators.py
MaxN
¶
Bases: Accumulator
$maxN accumulator - returns N maximum values (MongoDB 5.2+).
Example
MaxN(name="top3Scores", n=3, input="$score").model_dump() {"top3Scores": {"$maxN": {"n": 3, "input": "$score"}}}
Source code in mongo_aggro/accumulators.py
MinN
¶
Bases: Accumulator
$minN accumulator - returns N minimum values (MongoDB 5.2+).
Example
MinN(name="lowest3", n=3, input="$score").model_dump() {"lowest3": {"$minN": {"n": 3, "input": "$score"}}}
Source code in mongo_aggro/accumulators.py
Helper Functions¶
merge_accumulators
¶
Combine typed accumulator instances into a dict for Group stage.
This helper provides type-safe accumulator definitions with IDE autocomplete and validation, instead of writing raw MongoDB dicts.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*accumulators
|
Accumulator
|
Accumulator instances (Sum, Avg, Max, etc.) |
()
|
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
Combined dict suitable for Group's accumulators parameter. |
Example
Using typed accumulators (recommended for type safety):
Group( ... id="$category", ... accumulators=merge_accumulators( ... Sum(name="total", field="amount"), ... Avg(name="average", field="price"), ... Count_(name="count"), ... ) ... )
Equivalent raw dict (less type safety):
Group( ... id="$category", ... accumulators={ ... "total": {"$sum": "$amount"}, ... "average": {"$avg": "$price"}, ... "count": {"$count": {}}, ... } ... )