$lookup
$lookup: 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 55 of 100
$lookup
Foundations & CRUD ✓ → Queries & Schema ✓ → Aggregation & Scale → Atlas & Projects
Aggregation & Scale · 3 — Pipelines · ~10 min · MongoDB — Aggregation Pipelines
What is this?
$lookup performs a left outer join to another collection in the same database. It adds an array field with matching documents from the “foreign” collection.
Why should you care?
Orders reference products; dashboards need product names without manual loops in Node for every row.
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.insertOne({ _id: ObjectId("64c000000000000000000001"), name: "Hub", price: 1499 })
db.orders.insertOne({ productId: ObjectId("64c000000000000000000001"), qty: 2 })
db.orders.aggregate([
{ $lookup: {
from: "products",
localField: "productId",
foreignField: "_id",
as: "productDocs"
}},
{ $unwind: "$productDocs" },
{ $project: { qty: 1, productName: "$productDocs.name", price: "$productDocs.price" } }
])
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- $lookup pulls matching products into productDocs array.
- $unwind turns the one-element array into a flat field.
- $project exposes name and price beside qty.
Practice next
- Insert product and order with matching ids.
- Run the pipeline.
- Index orders.productId and ensure products._id is keyed.
- Lookup user profiles onto posts via authorId.
- Add a $match before $lookup to limit orders.
Remember
$lookup joins collections. Results land in an array field. Often followed by $unwind.
Order line enrichment
Admin order page shows product titles via $lookup instead of N+1 queries.
Outcome: One round trip renders the order detail.
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!