$unwind
$unwind: 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 56 of 100
$unwind
Foundations & CRUD ✓ → Queries & Schema ✓ → Aggregation & Scale → Atlas & Projects
Aggregation & Scale · 3 — Pipelines · ~10 min · MongoDB — Aggregation Pipelines
What is this?
$unwind deconstructs an array field so each element becomes its own document. It is how you turn line items into rows for reporting.
Why should you care?
To sum revenue by SKU you need one row per item, not one row per order. $unwind makes that possible.
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.insertOne({
orderId: "O1",
items: [
{ sku: "A", price: 100, qty: 2 },
{ sku: "B", price: 50, qty: 1 }
]
})
db.orders.aggregate([
{ $unwind: "$items" },
{ $project: {
orderId: 1,
sku: "$items.sku",
lineTotal: { $multiply: ["$items.price", "$items.qty"] }
}}
])
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- One order becomes two documents after $unwind.
- Each has one items element.
- lineTotal multiplies price and qty per line.
- Perfect input for a later $group by sku.
Practice next
- Run the unwind pipeline.
- Add $group by sku summing lineTotal.
- Try preserveNullAndEmptyArrays option for empty items.
- Unwind tags on posts and $group to count tag popularity.
- Chain $sort by lineTotal.
Remember
$unwind flattens arrays to rows. Essential before per-element math. Can explode document counts.
SKU contribution report
Finance unwinds order items to see which SKUs drove festival revenue.
Outcome: Clear ranking of top-selling SKUs.
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!