Basic Examples¶
This page shows basic examples of common aggregation patterns using Mongo Aggro.
Filtering and Sorting¶
Get Active Users Sorted by Date¶
from mongo_aggro import Pipeline, Match, Sort, Limit, DESCENDING
pipeline = Pipeline([
Match(query={"status": "active"}),
Sort(fields={"createdAt": DESCENDING}),
Limit(count=100),
])
# Pass pipeline directly - no to_list() needed!
results = collection.aggregate(pipeline)
Filter with Multiple Conditions¶
from mongo_aggro import Pipeline, Match, Project
pipeline = Pipeline([
Match(query={
"status": "active",
"age": {"$gte": 18, "$lte": 65},
"country": {"$in": ["US", "UK", "CA"]},
}),
Project(fields={
"_id": 0,
"name": 1,
"email": 1,
"country": 1,
}),
])
Grouping and Aggregation¶
Count by Category¶
from mongo_aggro import Pipeline, Group, Sort, DESCENDING
pipeline = Pipeline([
Group(id="$category", accumulators={"count": {"$sum": 1}}),
Sort(fields={"count": DESCENDING}),
])
Sales Summary by Product¶
from mongo_aggro import (
Pipeline, Match, Group, Sort,
Sum, Avg, merge_accumulators, DESCENDING
)
pipeline = Pipeline([
Match(query={"status": "completed"}),
Group(
id="$productId",
accumulators=merge_accumulators(
Sum(name="totalSales", field="amount"),
Sum(name="quantity", field="qty"),
Avg(name="avgPrice", field="price"),
)
),
Sort(fields={"totalSales": DESCENDING}),
])
Group by Multiple Fields¶
from mongo_aggro import Pipeline, Group, Sort, Sum, DESCENDING
pipeline = Pipeline([
Group(
id={"year": "$year", "month": "$month"},
accumulators={"total": {"$sum": "$amount"}}
),
Sort(fields={"_id.year": DESCENDING, "_id.month": DESCENDING}),
])
Working with Arrays¶
Unwind and Count¶
from mongo_aggro import Pipeline, Unwind, Group, Sort, DESCENDING
pipeline = Pipeline([
Unwind(path="tags"),
Group(id="$tags", accumulators={"count": {"$sum": 1}}),
Sort(fields={"count": DESCENDING}),
])
Flatten Nested Arrays¶
from mongo_aggro import Pipeline, Match, Unwind, Project
pipeline = Pipeline([
Match(query={"status": "active"}),
Unwind(path="items"),
Project(fields={
"orderId": "$_id",
"itemName": "$items.name",
"itemPrice": "$items.price",
}),
])
Pagination¶
Basic Pagination¶
from mongo_aggro import Pipeline, Match, Sort, Skip, Limit, DESCENDING
page = 2
page_size = 20
pipeline = Pipeline([
Match(query={"status": "active"}),
Sort(fields={"createdAt": DESCENDING}),
Skip(count=(page - 1) * page_size),
Limit(count=page_size),
])
Pagination with Total Count¶
from mongo_aggro import (
Pipeline, Match, Facet, Sort, Skip, Limit, Count, DESCENDING
)
page = 2
page_size = 20
pipeline = Pipeline([
Match(query={"status": "active"}),
Facet(pipelines={
"data": Pipeline([
Sort(fields={"createdAt": DESCENDING}),
Skip(count=(page - 1) * page_size),
Limit(count=page_size),
]),
"total": Pipeline([
Count(field="count"),
]),
}),
])
Field Transformation¶
Rename Fields¶
from mongo_aggro import Pipeline, Project
pipeline = Pipeline([
Project(fields={
"_id": 0,
"userId": "$_id",
"fullName": "$name",
"emailAddress": "$email",
}),
])
Computed Fields¶
from mongo_aggro import Pipeline, AddFields, Project
pipeline = Pipeline([
AddFields(fields={
"totalPrice": {"$multiply": ["$price", "$quantity"]},
"discountedPrice": {
"$subtract": [
{"$multiply": ["$price", "$quantity"]},
"$discount"
]
},
}),
Project(fields={
"name": 1,
"totalPrice": 1,
"discountedPrice": 1,
}),
])
Conditional Logic¶
Using $cond¶
from mongo_aggro import Pipeline, AddFields
pipeline = Pipeline([
AddFields(fields={
"status": {
"$cond": {
"if": {"$gte": ["$score", 70]},
"then": "pass",
"else": "fail"
}
}
}),
])
Using $switch¶
from mongo_aggro import Pipeline, AddFields
pipeline = Pipeline([
AddFields(fields={
"grade": {
"$switch": {
"branches": [
{"case": {"$gte": ["$score", 90]}, "then": "A"},
{"case": {"$gte": ["$score", 80]}, "then": "B"},
{"case": {"$gte": ["$score", 70]}, "then": "C"},
{"case": {"$gte": ["$score", 60]}, "then": "D"},
],
"default": "F"
}
}
}),
])