Bird
Raised Fist0
MongoDBquery~5 mins

Array of embedded documents queries in MongoDB - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is an embedded document in MongoDB?
An embedded document is a document stored inside another document as a value of a field. It helps group related data together in one place.
Click to reveal answer
beginner
How do you query for documents where an array contains an embedded document with a specific field value?
Use dot notation with the field inside the embedded document. For example, { 'arrayField.fieldName': value } finds documents where the array has an embedded document with that field value.
Click to reveal answer
intermediate
What does the $elemMatch operator do in MongoDB queries?
$elemMatch matches documents where at least one element in an array meets multiple conditions. It helps when you want to match several criteria inside the same embedded document in the array.
Click to reveal answer
intermediate
How can you update a specific embedded document inside an array in MongoDB?
Use the positional operator $ to update the first matching embedded document. For example, db.collection.updateOne({ 'arrayField.field': value }, { $set: { 'arrayField.$.fieldToUpdate': newValue } }) updates the matched embedded document.
Click to reveal answer
intermediate
What is the difference between querying with 'arrayField.field': value and using $elemMatch?
'arrayField.field': value matches if any embedded document in the array has that field value. $elemMatch lets you specify multiple conditions that must all be true in the same embedded document.
Click to reveal answer
Which MongoDB query finds documents where an array contains an embedded document with field 'score' equal to 10?
A{ 'array.$.score': 10 }
B{ 'array.score': 10 }
C{ 'array': 10 }
D{ 'array': { $elemMatch: { score: 5 } } }
What does the $elemMatch operator allow you to do?
ARemove embedded documents from an array
BMatch documents with empty arrays
CUpdate all embedded documents in an array
DMatch multiple conditions inside the same embedded document in an array
How do you update the first embedded document in an array that matches a condition?
AUse the positional operator $ in the update query
BUse $elemMatch in the update query
CUse $push operator
DUse $unset operator
Which query matches documents where an array contains an embedded document with 'score' 10 and 'grade' 'A' in the same element?
A{ 'array.score': 10, 'array.grade': 'A' }
B{ 'array': { $all: [10, 'A'] } }
C{ 'array': { $elemMatch: { score: 10, grade: 'A' } } }
D{ 'array.$.score': 10, 'array.$.grade': 'A' }
What is the result of querying { 'array.score': { $gt: 5 } }?
ADocuments where any embedded document in 'array' has 'score' greater than 5
BDocuments where all embedded documents in 'array' have 'score' greater than 5
CDocuments where 'array' contains the number 5
DDocuments where 'score' field is greater than 5 outside the array
Explain how to query for documents where an array contains an embedded document matching multiple conditions.
Think about matching several things inside one embedded document in the array.
You got /3 concepts.
    Describe how to update a specific embedded document inside an array in MongoDB.
    Remember the $ operator points to the matched array element.
    You got /3 concepts.

      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