$or operator behavior in MongoDB - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When using the $or operator in MongoDB queries, it is important to understand how the query time changes as the data grows.
We want to know how the number of checks MongoDB does increases when we add more documents or more conditions inside $or.
Analyze the time complexity of the following MongoDB query using $or.
db.collection.find({
$or: [
{ field1: value1 },
{ field2: value2 },
{ field3: value3 }
]
})
This query finds documents where field1 equals value1 OR field2 equals value2 OR field3 equals value3.
Look at what repeats when MongoDB runs this query.
- Primary operation: Checking each document against each condition inside the
$orarray. - How many times: For each document, MongoDB checks each condition until one matches or all fail.
As the number of documents grows, MongoDB must check more documents. Also, more $or conditions mean more checks per document.
| Input Size (n documents) | Approx. Operations |
|---|---|
| 10 | About 10 x 3 = 30 checks |
| 100 | About 100 x 3 = 300 checks |
| 1000 | About 1000 x 3 = 3000 checks |
Pattern observation: The total checks grow roughly in direct proportion to the number of documents and the number of $or conditions.
Time Complexity: O(n x k)
This means the time grows linearly with the number of documents n and the number of $or conditions k.
[X] Wrong: "Adding more $or conditions does not affect query time much because MongoDB stops at the first match."
[OK] Correct: MongoDB may check multiple conditions per document if earlier conditions fail, so more conditions can increase checks and time.
Understanding how $or affects query time helps you write efficient queries and explain your reasoning clearly in real-world situations.
What if we added indexes on the fields inside the $or conditions? How would the time complexity change?
Practice
What does the $or operator do in MongoDB queries?
Solution
Step 1: Understand the purpose of
The$or$oroperator is used to find documents that satisfy at least one condition from multiple conditions.Step 2: Compare with other operators
Unlike$and, which requires all conditions to be true,$orrequires only one condition to be true.Final Answer:
It returns documents that match at least one of the given conditions. -> Option AQuick Check:
$or= match any condition [OK]
- Confusing $or with $and operator
- Thinking $or filters documents matching all conditions
- Assuming $or sorts documents
Which of the following is the correct syntax to use $or in a MongoDB query?
{ $or: [ { age: { $lt: 20 } }, { city: "NY" } ] }Solution
Step 1: Check the structure of
The$or$oroperator requires an array of condition objects inside square brackets.Step 2: Validate each option's syntax
{ $or: [ { age: { $lt: 20 } }, { city: "NY" } ] } correctly uses an array with two objects. Options A, B, and C use incorrect brackets or missing array syntax.Final Answer:
{ $or: [ { age: { $lt: 20 } }, { city: "NY" } ] } -> Option CQuick Check:
$orneeds array of conditions [OK]
- Using curly braces instead of square brackets for conditions
- Using parentheses instead of brackets
- Not wrapping conditions inside an array
Given the collection users with documents:
[{ "name": "Alice", "age": 25, "city": "NY" }, { "name": "Bob", "age": 19, "city": "LA" }, { "name": "Carol", "age": 30, "city": "SF" }]What will the query db.users.find({ $or: [ { age: { $lt: 20 } }, { city: "SF" } ] }) return?
Solution
Step 1: Identify documents matching each condition
Condition 1: age < 20 matches Bob (age 19). Condition 2: city = "SF" matches Carol.Step 2: Combine results with
The query returns documents matching either condition, so Bob and Carol are included.$orFinal Answer:
[{ "name": "Bob", "age": 19, "city": "LA" }, { "name": "Carol", "age": 30, "city": "SF" }] -> Option AQuick Check:
$orreturns any matching document [OK]
- Including documents that don't match any condition
- Confusing $or with $and and expecting all conditions to match
- Ignoring one of the conditions
Consider this query that causes an error:
db.collection.find({ $or: { age: { $gt: 30 }, city: "NY" } })What is the main issue causing the error?
Solution
Step 1: Analyze the
$orsyntax$orexpects an array of condition objects, but here it is given a single object.Step 2: Identify the error cause
Because the value is not an array, MongoDB throws a syntax error.Final Answer:
$orrequires an array of conditions, not a single object. -> Option DQuick Check:
$orneeds array syntax [OK]
$or conditions in square brackets [OK]- Using object instead of array for
$orconditions - Misplacing operators inside
$or - Ignoring syntax errors from missing brackets
You want to find documents in a products collection where the category is either "electronics" or the price is less than 100. Which query correctly uses $or to achieve this?
Solution
Step 1: Understand the query goal
We want documents where category is "electronics" OR price is less than 100.Step 2: Check each option's logic and syntax
db.products.find({ $or: [ { category: "electronics" }, { price: { $lt: 100 } } ] }) correctly uses$orwith an array of two conditions. db.products.find({ $or: { category: "electronics", price: { $lt: 100 } } }) uses an object instead of array, causing syntax error. db.products.find({ category: "electronics" && price: { $lt: 100 } }) uses invalid syntax with &&. db.products.find({ $and: [ { category: "electronics" }, { price: { $lt: 100 } } ] }) uses$and, which requires both conditions to be true, not either.Final Answer:
db.products.find({ $or: [ { category: "electronics" }, { price: { $lt: 100 } } ] }) -> Option BQuick Check:
$orwith array matches either condition [OK]
$or for multiple conditions [OK]- Using object instead of array for
$or - Confusing
$orwith$and - Using invalid logical operators like && in MongoDB queries
