Bird
Raised Fist0
MongoDBquery~10 mins

Array of embedded documents queries in MongoDB - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Array of embedded documents queries
Start with collection
Identify array field
Use query operator on array
Match embedded document condition?
NoSkip document
Yes
Return matching documents
End
The query checks each document's array field for embedded documents matching the condition and returns those documents.
Execution Sample
MongoDB
db.orders.find({"items.product": "apple"})
Finds all orders where the items array contains an embedded document with product equal to 'apple'.
Execution Table
StepDocument _iditems ArrayCondition CheckMatch ResultAction
1order1[{product: 'apple', qty: 5}, {product: 'banana', qty: 2}]Check if any item.product == 'apple'TrueInclude document
2order2[{product: 'orange', qty: 3}, {product: 'banana', qty: 1}]Check if any item.product == 'apple'FalseSkip document
3order3[{product: 'apple', qty: 1}]Check if any item.product == 'apple'TrueInclude document
4order4[]Check if any item.product == 'apple'FalseSkip document
5order5[{product: 'grape', qty: 4}]Check if any item.product == 'apple'FalseSkip document
💡 All documents checked; only those with matching embedded documents are returned.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5Final
Current DocumentNoneorder1order2order3order4order5None
Match FoundFalseTrueFalseTrueFalseFalseN/A
Result Set Count0112222
Key Moments - 3 Insights
Why does the query match the whole document if only one embedded document in the array matches?
Because MongoDB returns the entire document if any embedded document in the array satisfies the condition, as shown in execution_table rows 1 and 3.
What happens if the array is empty or missing?
The condition check fails (False), so the document is skipped, as seen in execution_table row 4.
Can the query match multiple embedded documents in the same array?
Yes, but the query only requires at least one embedded document to match; it does not return multiple copies of the document.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the Match Result for document 'order2'?
ATrue
BUnknown
CFalse
DError
💡 Hint
Check the 'Match Result' column for 'order2' in the execution_table.
At which step does the Result Set Count become 2?
AAfter step 2
BAfter step 3
CAfter step 4
DAfter step 5
💡 Hint
Look at the 'Result Set Count' row in variable_tracker after each step.
If the query condition changed to 'items.qty': {$gt: 3}, which document would match at step 1?
Aorder1
Border2
Corder3
Dorder4
💡 Hint
Check the 'items' array in execution_table row 1 and see if any qty is greater than 3.
Concept Snapshot
Querying arrays of embedded documents:
Use dot notation to specify fields inside embedded docs.
MongoDB matches documents if any array element meets the condition.
Empty or missing arrays do not match.
Returned documents include the whole document, not just matched elements.
Full Transcript
This visual execution shows how MongoDB queries work on arrays of embedded documents. Each document's array field is checked for embedded documents matching the query condition. If any embedded document matches, the whole document is included in the results. Documents with empty or missing arrays do not match. The variable tracker shows how the current document and match status change step by step, and the result set count increases only when a match is found. This helps beginners understand how array queries work in MongoDB.

Practice

(1/5)
1.

Which MongoDB query operator is used to match documents where at least one element in an array of embedded documents meets multiple conditions?

easy
A. $exists
B. $all
C. $in
D. $elemMatch

Solution

  1. Step 1: Understand the need for multiple conditions on one embedded document

    When querying arrays of embedded documents, multiple conditions on the same element require a special operator.
  2. Step 2: Identify the correct operator for matching multiple conditions on one element

    $elemMatch matches documents where at least one array element satisfies all specified conditions.
  3. Final Answer:

    $elemMatch -> Option D
  4. Quick Check:

    Multiple conditions on one embedded doc = $elemMatch [OK]
Hint: Use $elemMatch for multiple conditions on one array element [OK]
Common Mistakes:
  • Using $all which matches all elements separately
  • Using $in which matches any value but not multiple conditions
  • Confusing $exists with array element matching
2.

Which of the following is the correct MongoDB query syntax to find documents where the comments array contains an embedded document with author equal to "Alice"?

{ comments: { ? } }
easy
A. { $in: { author: "Alice" } }
B. { author: "Alice" }
C. { $elemMatch: { author: "Alice" } }
D. { $all: { author: "Alice" } }

Solution

  1. Step 1: Identify simple query for matching one field in embedded documents

    To find documents where any embedded document in an array has a field equal to a value, use $elemMatch or direct matching.
  2. Step 2: Recognize that { comments: { $elemMatch: { author: "Alice" } } } matches if any embedded document has author "Alice"

    This syntax matches documents where at least one element in comments array has author "Alice".
  3. Final Answer:

    { $elemMatch: { author: "Alice" } } -> Option C
  4. Quick Check:

    Use $elemMatch for embedded document match [OK]
Hint: Use $elemMatch for embedded document match [OK]
Common Mistakes:
  • Using $in or $all incorrectly with embedded documents
  • Confusing array field with embedded document field
  • Using direct object without $elemMatch may not always work as expected
3.

Given the collection posts with documents like:

{ _id: 1, comments: [ { author: "Bob", likes: 5 }, { author: "Alice", likes: 3 } ] }

What will the query db.posts.find({ comments: { $elemMatch: { author: "Alice", likes: { $gt: 2 } } } }) return?

medium
A. [{ _id: 1, comments: [...] }]
B. [] (empty array)
C. Syntax error
D. All documents in posts collection

Solution

  1. Step 1: Understand $elemMatch with multiple conditions

    The query looks for documents where at least one comment has author "Alice" and likes greater than 2.
  2. Step 2: Check the example document for matching embedded document

    The second comment has author "Alice" and likes 3, which is greater than 2, so it matches.
  3. Final Answer:

    [{ _id: 1, comments: [...] }] -> Option A
  4. Quick Check:

    Matching embedded doc with $elemMatch returns document [OK]
Hint: Check all conditions inside $elemMatch for one embedded doc [OK]
Common Mistakes:
  • Assuming $elemMatch matches separate elements for each condition
  • Expecting empty result when conditions are met
  • Confusing $elemMatch with $all
4.

Identify the error in this MongoDB query to find documents where reviews array has an embedded document with rating greater than 4 and verified true:

db.collection.find({ reviews: { rating: { $gt: 4 }, verified: true } })
medium
A. reviews field should not be queried as an array
B. Missing $elemMatch to combine multiple conditions on one embedded document
C. Incorrect use of $gt operator
D. Syntax error due to missing commas

Solution

  1. Step 1: Recognize multiple conditions on one embedded document

    Multiple conditions on fields inside an array element require $elemMatch to ensure they apply to the same element.
  2. Step 2: Identify missing $elemMatch usage

    The query incorrectly tries to match multiple fields directly inside the array field, which matches documents with separate elements for each condition, not the same element.
  3. Final Answer:

    Missing $elemMatch to combine multiple conditions on one embedded document -> Option B
  4. Quick Check:

    Multiple conditions on one element need $elemMatch [OK]
Hint: Use $elemMatch for multiple conditions on same embedded doc [OK]
Common Mistakes:
  • Omitting $elemMatch for multiple conditions
  • Assuming direct object matches all conditions on one element
  • Misunderstanding array query behavior
5.

You have a collection orders with documents like:

{ _id: 1, items: [ { product: "Pen", qty: 10 }, { product: "Notebook", qty: 5 } ] }

Write a query to find orders where items contains a product "Pen" with quantity at least 10, and also a product "Notebook" with quantity at least 5.

Which query correctly finds such orders?

hard
A. { items: { $elemMatch: { product: "Pen", qty: { $gte: 10 } } }, items: { $elemMatch: { product: "Notebook", qty: { $gte: 5 } } } }
B. { items: { $elemMatch: { product: "Pen", qty: { $gte: 10 }, product: "Notebook", qty: { $gte: 5 } } } }
C. { items: { product: "Pen", qty: { $gte: 10 }, product: "Notebook", qty: { $gte: 5 } } }
D. { items: { $in: [ { product: "Pen", qty: { $gte: 10 } }, { product: "Notebook", qty: { $gte: 5 } } ] } }

Solution

  1. Step 1: Understand the need to match two different embedded documents in the array

    We want orders where items array has one element matching Pen with qty >= 10 and another element matching Notebook with qty >= 5.
  2. Step 2: Use repeated array field with $elemMatch to require both conditions on separate elements

    Repeating the array field key with $elemMatch for each condition ensures at least one array element satisfies each set of conditions.
  3. Step 3: Eliminate incorrect options

    { items: { $elemMatch: { product: "Pen", qty: { $gte: 10 }, product: "Notebook", qty: { $gte: 5 } } } } tries to match both products in one element (impossible). { items: { product: "Pen", qty: { $gte: 10 }, product: "Notebook", qty: { $gte: 5 } } } is invalid syntax. { items: { $in: [ { product: "Pen", qty: { $gte: 10 } }, { product: "Notebook", qty: { $gte: 5 } } ] } } uses $in which matches any element but not both conditions.
  4. Final Answer:

    { items: { $elemMatch: { product: "Pen", qty: { $gte: 10 } } }, items: { $elemMatch: { product: "Notebook", qty: { $gte: 5 } } } } -> Option A
  5. Quick Check:

    Repeated field + $elemMatch for multiple different embedded docs [OK]
Hint: Use repeated array field with $elemMatch for multiple different embedded docs [OK]
Common Mistakes:
  • Trying to match multiple products in one embedded document
  • Using $elemMatch alone for multiple different elements
  • Using $in which matches any but not all conditions