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
Querying Array Elements Directly in MongoDB
📖 Scenario: You work at a bookstore that stores book information in a MongoDB collection. Each book document has a title and an array of reviews. Each review has a reviewer's name and a rating.You want to find books that have at least one review with a rating of 5.
🎯 Goal: Build a MongoDB query that finds books with at least one review having a rating of 5 by querying array elements directly.
📋 What You'll Learn
Create a collection named books with documents containing title and reviews array
Add a configuration variable targetRating set to 5
Write a query that finds books where any review's rating equals targetRating
Complete the query to return only the title and matching reviews elements
💡 Why This Matters
🌍 Real World
Many applications store lists of related data inside documents. Querying array elements directly helps find specific items quickly.
💼 Career
Database developers and backend engineers often write queries to filter nested array data in MongoDB for efficient data retrieval.
Progress0 / 4 steps
1
Create the books collection with sample data
Create a MongoDB collection called books and insert these exact documents: { title: "Book A", reviews: [{ reviewer: "Alice", rating: 4 }, { reviewer: "Bob", rating: 5 }] } and { title: "Book B", reviews: [{ reviewer: "Carol", rating: 3 }, { reviewer: "Dave", rating: 2 }] }.
MongoDB
Hint
Use db.books.insertMany() with an array of two objects as shown.
2
Set the targetRating variable
Create a variable called targetRating and set it to the number 5.
MongoDB
Hint
Use const targetRating = 5 to create the variable.
3
Write the query to find books with a review rating equal to targetRating
Write a MongoDB query using db.books.find() that finds documents where the reviews array has at least one element with rating equal to targetRating. Use the query { "reviews.rating": targetRating }.
MongoDB
Hint
Use dot notation "reviews.rating" in the query object.
4
Complete the query to return only title and matching reviews elements
Complete the query by calling db.books.find() with the query and a projection that returns only title and the matching reviews.$ element.
MongoDB
Hint
Use { title: 1, "reviews.$": 1 } as the projection to get only the title and the matched review.
Practice
(1/5)
1. What does the MongoDB query { tags: "mongodb" } do when applied to a collection where tags is an array field?
easy
A. Finds documents where the tags array contains the value "mongodb".
B. Finds documents where the tags array is exactly equal to "mongodb".
C. Finds documents where the tags array is empty.
D. Finds documents where the tags field does not exist.
Solution
Step 1: Understand array field querying in MongoDB
When querying an array field with a value, MongoDB checks if the array contains that value anywhere.
Step 2: Analyze the query { tags: "mongodb" }
This query looks for documents where the tags array includes the string "mongodb" as one of its elements.
Final Answer:
Finds documents where the tags array contains the value "mongodb". -> Option A
Quick Check:
Querying array with value checks for presence = B [OK]
Hint: Querying array with value checks for presence [OK]
Common Mistakes:
Thinking it matches exact array equality
Assuming it matches empty arrays
Confusing missing field with array content
2. Which of the following is the correct MongoDB query syntax to find documents where the array field scores contains the number 85?
easy
A. { scores: { $contains: 85 } }
B. { scores: { $in: 85 } }
C. { scores: 85 }
D. { scores: { $eq: [85] } }
Solution
Step 1: Recall MongoDB syntax for matching array elements
To find documents where an array contains a value, simply use { field: value } syntax.
Step 2: Evaluate each option
{ scores: { $contains: 85 } } uses a non-existent operator $contains. { scores: { $eq: [85] } } incorrectly uses $eq with an array. { scores: { $in: 85 } } uses $in incorrectly without an array. { scores: 85 } correctly uses { scores: 85 }.
Final Answer:
{ scores: 85 } -> Option C
Quick Check:
Simple value match syntax = D [OK]
Hint: Use {field: value} to match array elements directly [OK]
Common Mistakes:
Using non-existent operators like $contains
Misusing $eq with arrays
Passing non-array to $in operator
3. Given the collection documents:
{ _id: 1, scores: [70, 85, 90] }
{ _id: 2, scores: [60, 75] }
{ _id: 3, scores: [85, 95] }
What will be the result of the query { scores: 85 }?
Hint: Query returns docs where array contains value [OK]
Common Mistakes:
Expecting only one document
Thinking query returns empty if multiple matches
Confusing syntax error with valid query
4. Consider this incorrect MongoDB query to find documents where the tags array contains both "red" and "blue":
{ tags: { $all: "red", "blue" } }
What is the main issue with this query?
medium
A. The $all operator requires an array of values, not separate arguments.
B. The query should use $elemMatch instead of $all.
C. The field name should be inside quotes.
D. The query is missing a $and operator.
Solution
Step 1: Understand $all operator syntax
The $all operator expects an array of values to match all elements inside the array field.
Step 2: Identify the syntax error in the query
The query incorrectly passes separate arguments to $all instead of an array. Correct syntax is { tags: { $all: ["red", "blue"] } }.
Final Answer:
The $all operator requires an array of values, not separate arguments. -> Option A
Quick Check:
$all needs array syntax = A [OK]
Hint: Use array syntax with $all operator [OK]
Common Mistakes:
Passing multiple values without array brackets
Confusing $all with $elemMatch
Ignoring syntax errors in operator usage
5. You want to find documents where the ratings array contains at least one element greater than 4 and less than 7. Which query correctly uses $elemMatch to achieve this?
Step 1: Understand $elemMatch usage for multiple conditions on array elements
$elemMatch allows specifying multiple conditions that must be true for the same array element.
Step 2: Analyze each option for correctness
{ ratings: { $elemMatch: { $gt: 4, $lt: 7 } } } correctly uses $elemMatch with $gt and $lt to find elements >4 and <7. { ratings: { $gt: 4, $lt: 7 } } is invalid syntax because $gt and $lt cannot be used directly on the array field. { ratings: { $in: [5, 6] } } matches specific values but does not cover the range condition. { ratings: { $elemMatch: { $gte: 4, $lte: 7 } } } uses $gte and $lte which includes 4 and 7, not strictly greater and less.