Sometimes, you want to find documents where an array contains specific values. Querying array elements directly helps you do that easily.
Querying array elements directly in MongoDB
Start learning this pattern below
Jump into concepts and practice - no test required
db.collection.find({ arrayField: value })This query finds documents where arrayField contains value.
You can also use operators like $elemMatch for more complex conditions.
db.users.find({ hobbies: "reading" })db.orders.find({ items: 12345 })db.posts.find({ tags: { $elemMatch: { $eq: "mongodb" } } })db.students.find({ grades: { $elemMatch: { $gte: 90 } } })This program creates a 'students' collection with grades arrays. It then finds students who have a grade exactly equal to 90 in their grades array.
use school // Insert sample documents db.students.insertMany([ { name: "Alice", grades: [85, 92, 78] }, { name: "Bob", grades: [88, 90, 95] }, { name: "Charlie", grades: [70, 75, 80] } ]) // Find students who have a grade of 90 const result = db.students.find({ grades: 90 }).toArray() printjson(result)
Querying arrays directly checks if the array contains the value anywhere inside.
Time complexity depends on indexes; indexing array fields can speed up queries.
Common mistake: expecting the query to match the whole array instead of any element.
Use $elemMatch when you need to match multiple conditions on the same array element.
You can query arrays by specifying the value to find documents where the array contains it.
Simple queries check for presence of a value; $elemMatch allows complex conditions.
Indexing array fields improves query performance.
Practice
{ tags: "mongodb" } do when applied to a collection where tags is an array field?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
This query looks for documents where the{ tags: "mongodb" }tagsarray includes the string "mongodb" as one of its elements.Final Answer:
Finds documents where the tags array contains the value "mongodb". -> Option AQuick Check:
Querying array with value checks for presence = B [OK]
- Thinking it matches exact array equality
- Assuming it matches empty arrays
- Confusing missing field with array content
scores contains the number 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$eqwith an array. { scores: { $in: 85 } } uses$inincorrectly without an array. { scores: 85 } correctly uses{ scores: 85 }.Final Answer:
{ scores: 85 } -> Option CQuick Check:
Simple value match syntax = D [OK]
- Using non-existent operators like $contains
- Misusing $eq with arrays
- Passing non-array to $in operator
{ _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 }?Solution
Step 1: Identify which documents have 85 in their scores array
Document 1 has scores [70, 85, 90] which includes 85. Document 3 has scores [85, 95] which also includes 85. Document 2 does not have 85.Step 2: Understand the query result
The query{ scores: 85 }returns all documents where the scores array contains 85, so documents 1 and 3.Final Answer:
[{ _id: 1, scores: [70, 85, 90] }, { _id: 3, scores: [85, 95] }] -> Option DQuick Check:
Documents with 85 in scores = C [OK]
- Expecting only one document
- Thinking query returns empty if multiple matches
- Confusing syntax error with valid query
tags array contains both "red" and "blue":{ tags: { $all: "red", "blue" } }What is the main issue with this query?
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 AQuick Check:
$all needs array syntax = A [OK]
- Passing multiple values without array brackets
- Confusing $all with $elemMatch
- Ignoring syntax errors in operator usage
ratings array contains at least one element greater than 4 and less than 7. Which query correctly uses $elemMatch to achieve this?Solution
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.Final Answer:
{ ratings: { $elemMatch: { $gt: 4, $lt: 7 } } } -> Option BQuick Check:
Use $elemMatch for multiple conditions on one element = A [OK]
- Using $gt and $lt directly on array field
- Using $in instead of range operators
- Confusing inclusive and exclusive range operators
