$match
$match: 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 52 of 100
$match
Foundations & CRUD ✓ → Queries & Schema ✓ → Aggregation & Scale → Atlas & Projects
Aggregation & Scale · 3 — Pipelines · ~6 min · MongoDB — Aggregation Pipelines
What is this?
$match is the pipeline stage that filters documents using the same query language as find. Place it early to shrink data before heavy stages.
Why should you care?
If you $group millions of docs first, you waste CPU. $match on tenantId and date first keeps pipelines cheap.
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.aggregate([
{ $match: {
tenantId: "acme",
status: { $in: ["paid", "shipped"] },
placedAt: { $gte: ISODate("2026-07-01") }
}},
{ $count: "matched" }
])
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Only Acme paid/shipped orders since July pass.
- $count returns how many matched.
- Indexes on tenantId + placedAt help this $match use IXSCAN.
Practice next
- Seed orders with tenantId and placedAt.
- Run the $match + $count pipeline.
- explain with db.orders.aggregate([...], { explain: true }) if available in your version.
- Add total: { $gte: 1000 } to $match.
- Match nested "address.city": "Pune".
Remember
$match filters like find. Put it early in pipelines. Index the $match fields.
Tenant-scoped analytics
Every report pipeline starts with $match on tenantId.
Outcome: No cross-tenant data ever enters the group stage.
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!