Combining comparison operators in MongoDB - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When we combine comparison operators in MongoDB queries, it affects how many documents the database checks.
We want to understand how the work grows as the data size grows when using these combined conditions.
Analyze the time complexity of the following code snippet.
db.products.find({
price: { $gt: 10, $lt: 50 },
rating: { $gte: 4 }
})
This query finds products with price greater than 10 and less than 50, and rating at least 4.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Scanning documents to check if they meet all combined conditions.
- How many times: Each document is checked once against all conditions.
Explain the growth pattern intuitively.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The number of checks grows directly with the number of documents.
Time Complexity: O(n)
This means the time to run the query grows linearly with the number of documents in the collection.
[X] Wrong: "Combining multiple comparison operators makes the query run faster because it narrows results."
[OK] Correct: While it narrows results, the database still checks each document to see if it matches all conditions, so the work grows with data size.
Understanding how combined conditions affect query time helps you explain database performance clearly and shows you know how queries scale with data.
"What if we added an index on price and rating? How would the time complexity change?"
Practice
age is greater than 20 and less than 30?Solution
Step 1: Understand the requirement for age range
The question asks for documents where age is strictly greater than 20 and strictly less than 30.Step 2: Identify the correct MongoDB syntax for combined conditions
Using{ age: { $gt: 20, $lt: 30 } }combines both conditions on the same field correctly.Final Answer:
{ age: { $gt: 20, $lt: 30 } } -> Option BQuick Check:
Combined $gt and $lt on same field = { age: { $gt: 20, $lt: 30 } } [OK]
- Using $gte and $lte includes boundary values, not strictly between
- Placing $lt outside the field object causes syntax error
- Using $ne does not check range but excludes specific values
score is not equal to 50 and less than or equal to 100?Solution
Step 1: Combine $ne and $lte inside the same field object
Both conditions must apply toscore, so they go together inside one object.Step 2: Check each option's syntax
{ score: { $ne: 50, $lte: 100 } } correctly combines$ne: 50and$lte: 100insidescore. { score: { $ne: 50 }, $lte: 100 } separates$lteoutside, which is invalid syntax.Final Answer:
{ score: { $ne: 50, $lte: 100 } } -> Option AQuick Check:
Combine $ne and $lte inside one field object = { score: { $ne: 50, $lte: 100 } } [OK]
- Placing $lte outside the field object causes syntax error
- Using $gte instead of $lte changes the condition
- Separating operators into different objects breaks query
products with documents like { price: 150, stock: 30 }, what will the query { price: { $gt: 100, $lt: 200 }, stock: { $gte: 20, $lte: 40 } } return?Solution
Step 1: Understand the combined conditions on price and stock
The query uses $gt and $lt on price to find values strictly between 100 and 200, and $gte and $lte on stock to find values between 20 and 40 inclusive.Step 2: Interpret the logical AND behavior of MongoDB queries
Both conditions must be true for a document to match, so only documents with price in (100,200) and stock in [20,40] are returned.Final Answer:
Documents where price is between 100 and 200, and stock is between 20 and 40 -> Option CQuick Check:
Combined conditions on fields = Documents where price is between 100 and 200, and stock is between 20 and 40 [OK]
- Thinking conditions combine with OR instead of AND
- Confusing inclusive ($gte/$lte) with exclusive ($gt/$lt)
- Assuming exact matches instead of ranges
{ quantity: { $gt: 10 }, $lt: 50 }Solution
Step 1: Analyze the placement of comparison operators
The $lt operator is placed outside thequantityfield object, which is invalid syntax in MongoDB queries.Step 2: Correct syntax requires all operators on the same field inside one object
Both $gt and $lt must be inside thequantityobject like{ quantity: { $gt: 10, $lt: 50 } }.Final Answer:
The $lt operator is outside the field object and causes syntax error -> Option DQuick Check:
All operators must be inside field object = The $lt operator is outside the field object and causes syntax error [OK]
- Placing operators outside the field object
- Confusing $gt with $gte unnecessarily
- Assuming query works despite syntax error
rating is greater than 3 but not equal to 5, and reviews are between 10 and 100 inclusive. Which query correctly combines these conditions?Solution
Step 1: Combine multiple comparison operators on the same field correctly
Both$gt: 3and$ne: 5must be inside the sameratingobject to apply both conditions.Step 2: Use inclusive range operators for reviews
Since reviews should be between 10 and 100 inclusive, use$gte: 10and$lte: 100inside thereviewsobject.Step 3: Check for syntax errors and logical correctness
{ rating: { $gt: 3, $ne: 5 }, reviews: { $gte: 10, $lte: 100 } } correctly combines all conditions. { rating: { $gt: 3 }, rating: { $ne: 5 }, reviews: { $gte: 10, $lte: 100 } } repeats theratingfield, which is invalid. { rating: { $gt: 3, $ne: 5, $gte: 10 }, reviews: { $lte: 100 } } incorrectly adds$gte: 10to rating. { rating: { $gt: 3, $ne: 5 }, reviews: { $gt: 10, $lt: 100 } } uses exclusive operators for reviews, which is incorrect.Final Answer:
{ rating: { $gt: 3, $ne: 5 }, reviews: { $gte: 10, $lte: 100 } } -> Option AQuick Check:
Combine all conditions inside field objects correctly = { rating: { $gt: 3, $ne: 5 }, reviews: { $gte: 10, $lte: 100 } } [OK]
- Repeating the same field multiple times in query
- Mixing inclusive and exclusive operators incorrectly
- Adding unrelated operators inside wrong field objects
