$facet
$facet: free step-by-step lesson with examples, common mistakes, and interview tips — part of MongoDB Tutorial on Toolliyo Academy.
On this page
MongoDB Tutorial · Lesson 57 of 100
$facet
Foundations & CRUD ✓ → Queries & Schema ✓ → Aggregation & Scale → Atlas & Projects
Aggregation & Scale · 3 — Pipelines · ~10 min · MongoDB — Aggregation Pipelines
What is this?
$facet runs multiple sub-pipelines on the same input documents in one stage, producing several result lists side by side — perfect for dashboards.
Why should you care?
A single API response may need totals, top 5 products, and status breakdown without scanning the collection three times from the client.
See it live — copy this example
Open mongosh or MongoDB Compass, select database nosqlverse, then run the example. Change one field and run again.
db.orders.insertMany([
{ status: "paid", total: 100 },
{ status: "paid", total: 400 },
{ status: "cancelled", total: 50 }
])
db.orders.aggregate([
{ $facet: {
byStatus: [ { $group: { _id: "$status", n: { $sum: 1 } } } ],
totals: [ { $group: { _id: null, revenue: { $sum: "$total" } } } ],
sample: [ { $limit: 2 } ]
}}
])
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- One $facet outputs an object with byStatus, totals, and sample arrays.
- Each sub-pipeline sees the same input (all orders here).
- Clients get three views in one round trip.
Practice next
- Run the facet pipeline.
- Add a $match before $facet to scope a tenant.
- Add a topOrders sub-pipeline with $sort+$limit.
- Facet products: price histogram + brand counts.
- Add a $project after facet to reshape.
Remember
$facet runs parallel sub-pipelines. Great for dashboard payloads. Filter before faceting.
Seller home dashboard
One request returns order counts by status, GMV, and recent orders.
Outcome: Mobile seller app loads the home screen in one call.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!