$bucket
$bucket: 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 58 of 100
$bucket
Foundations & CRUD ✓ → Queries & Schema ✓ → Aggregation & Scale → Atlas & Projects
Aggregation & Scale · 3 — Pipelines · ~10 min · MongoDB — Aggregation Pipelines
What is this?
$bucket groups documents into numeric or value ranges you define — like price bands 0–999, 1000–4999, 5000+. Related: $bucketAuto for automatic boundaries.
Why should you care?
Product analytics and age demographics need histograms, not raw row dumps.
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.products.insertMany([
{ name: "A", price: 500 },
{ name: "B", price: 1500 },
{ name: "C", price: 7000 },
{ name: "D", price: 2500 }
])
db.products.aggregate([
{ $bucket: {
groupBy: "$price",
boundaries: [0, 1000, 5000, 10000],
default: "other",
output: { count: { $sum: 1 }, products: { $push: "$name" } }
}}
])
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Prices fall into [0,1000), [1000,5000), [5000,10000).
- Each bucket outputs count and product names.
- default catches values outside boundaries.
Practice next
- Run the $bucket pipeline.
- Change boundaries and re-run.
- Try $bucketAuto with buckets: 3.
- Bucket orders by total for AOV bands.
- Output avgPrice with $avg.
Remember
$bucket builds histograms. boundaries define ranges. output customizes bucket fields.
Price band assortment
Category managers see how many SKUs sit in budget vs premium bands.
Outcome: Assortment gaps become visible quickly.
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!