Bird
Raised Fist0
MongoDBquery~10 mins

Combining logical and comparison operators in MongoDB - Interactive Code Practice

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
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to find documents where age is greater than 25.

MongoDB
db.collection.find({ age: { $[1]: 25 } })
Drag options to blanks, or click blank then click option'
Alt
Beq
Cne
Dgt
Attempts:
3 left
💡 Hint
Common Mistakes
Using $lt instead of $gt will find ages less than 25.
Using $eq will find ages exactly 25, not greater.
2fill in blank
medium

Complete the code to find documents where status is 'active' and score is at least 80.

MongoDB
db.collection.find({ $and: [ { status: '[1]' }, { score: { $gte: 80 } } ] })
Drag options to blanks, or click blank then click option'
Aactive
Binactive
Cpending
Dclosed
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'inactive' will find the wrong documents.
Leaving the status value empty will cause an error.
3fill in blank
hard

Fix the error in the query to find documents where age is less than 30 or score is greater than 90.

MongoDB
db.collection.find({ $or: [ { age: { $[1]: 30 } }, { score: { $gt: 90 } } ] })
Drag options to blanks, or click blank then click option'
Alte
Beq
Clt
Dgte
Attempts:
3 left
💡 Hint
Common Mistakes
Using $gte will find ages greater than or equal to 30, which is wrong here.
Using $eq will only find age exactly 30.
4fill in blank
hard

Fill both blanks to find documents where status is 'pending' and age is not equal to 40.

MongoDB
db.collection.find({ $and: [ { status: '[1]' }, { age: { $[2]: 40 } } ] })
Drag options to blanks, or click blank then click option'
Apending
Bactive
Cne
Deq
Attempts:
3 left
💡 Hint
Common Mistakes
Using $eq instead of $ne will find age exactly 40, not excluding it.
Using wrong status value will find wrong documents.
5fill in blank
hard

Fill all three blanks to find documents where name starts with 'J', age is greater than 20, and score is less than or equal to 100.

MongoDB
db.collection.find({ $and: [ { name: { $regex: '^[1]' } }, { age: { $[2]: 20 } }, { score: { $[3]: 100 } } ] })
Drag options to blanks, or click blank then click option'
AJ
Bgt
Clte
Dlt
Attempts:
3 left
💡 Hint
Common Mistakes
Using $lt instead of $gt for age will find wrong documents.
Using $lt instead of $lte for score excludes 100.

Practice

(1/5)
1. Which MongoDB operator is used to combine multiple conditions where all must be true?
easy
A. $gt
B. $and
C. $or
D. $lt

Solution

  1. Step 1: Understand logical operators

    $and requires all conditions inside it to be true for a document to match.
  2. Step 2: Compare with other operators

    $or requires any condition to be true, $gt and $lt are comparison operators, not logical combiners.
  3. Final Answer:

    $and -> Option B
  4. Quick Check:

    All conditions true = $and [OK]
Hint: Use $and to require all conditions true [OK]
Common Mistakes:
  • Confusing $and with $or
  • Using comparison operators as logical
  • Mixing $gt with $and
2. Which of the following is the correct syntax using $and to find documents where age is greater than 25 and status is 'active'?
easy
A. { $and: [ { age: { $gt: 25 } }, { status: 'active' } ] }
B. { $or: [ { age: { $gt: 25 } }, { status: 'active' } ] }
C. { age: { $gt: 25 }, status: 'active' }
D. { $and: { age: { $gt: 25 }, status: 'active' } }

Solution

  1. Step 1: Check $and syntax

    $and requires an array of conditions, so the value must be an array of objects.
  2. Step 2: Validate other options

    { $or: [ { age: { $gt: 25 } }, { status: 'active' } ] } uses $or, { age: { $gt: 25 }, status: 'active' } uses implicit AND but not with $and operator, { $and: { age: { $gt: 25 }, status: 'active' } } uses $and with an object instead of array which is invalid.
  3. Final Answer:

    { $and: [ { age: { $gt: 25 } }, { status: 'active' } ] } -> Option A
  4. Quick Check:

    $and needs array of conditions [OK]
Hint: Use array inside $and for multiple conditions [OK]
Common Mistakes:
  • Using object instead of array in $and
  • Confusing $and with $or
  • Missing $gt operator syntax
3. Given the collection documents: [{ age: 30, status: 'active' }, { age: 20, status: 'inactive' }, { age: 40, status: 'active' }], what documents match this query?
{ $or: [ { age: { $lt: 25 } }, { status: 'active' } ] }
medium
A. [{ age: 30, status: 'active' }, { age: 40, status: 'active' }]
B. []
C. [{ age: 20, status: 'inactive' }]
D. [{ age: 20, status: 'inactive' }, { age: 30, status: 'active' }, { age: 40, status: 'active' }]

Solution

  1. Step 1: Understand $or condition

    Documents match if age is less than 25 OR status is 'active'.
  2. Step 2: Check each document

    First doc: age 30 (not <25), status 'active' (matches). Second doc: age 20 (<25), status 'inactive' (matches age condition). Third doc: age 40 (not <25), status 'active' (matches).
  3. Final Answer:

    All three documents match -> Option D
  4. Quick Check:

    $or matches any condition true [OK]
Hint: Any condition true in $or returns document [OK]
Common Mistakes:
  • Ignoring one condition in $or
  • Confusing $or with $and
  • Wrongly excluding documents
4. Identify the error in this MongoDB query to find documents where score is greater than 50 and less than 100:
{ $and: { score: { $gt: 50 }, score: { $lt: 100 } } }
medium
A. Using object instead of array inside $and
B. Using $gt and $lt together is invalid
C. Missing $or operator
D. score field should be inside $or

Solution

  1. Step 1: Check $and operator usage

    $and requires an array of condition objects, not a single object with repeated keys.
  2. Step 2: Understand object key overwrite

    In the object, 'score' key appears twice, so only the last one is used, causing incorrect query.
  3. Final Answer:

    Using object instead of array inside $and -> Option A
  4. Quick Check:

    $and needs array, not object with duplicate keys [OK]
Hint: Use array for $and conditions to avoid key overwrite [OK]
Common Mistakes:
  • Using object with duplicate keys in $and
  • Confusing $and with $or
  • Thinking $gt and $lt can't combine
5. You want to find documents where (age is greater than 30 and status is 'active') or (score is less than 50). Which query correctly combines these conditions?
hard
A. { $and: { $or: [ { age: { $gt: 30 } }, { status: 'active' } ], score: { $lt: 50 } } }
B. { $and: [ { age: { $gt: 30 } }, { status: 'active' }, { score: { $lt: 50 } } ] }
C. { $or: [ { $and: [ { age: { $gt: 30 } }, { status: 'active' } ] }, { score: { $lt: 50 } } ] }
D. { $or: { age: { $gt: 30 }, status: 'active', score: { $lt: 50 } } }

Solution

  1. Step 1: Break down the condition

    We want documents matching either (age > 30 AND status = 'active') OR (score < 50).
  2. Step 2: Match query structure

    { $or: [ { $and: [ { age: { $gt: 30 } }, { status: 'active' } ] }, { score: { $lt: 50 } } ] } uses $or with two parts: one $and array for age and status, and one condition for score less than 50, matching the requirement exactly.
  3. Final Answer:

    { $or: [ { $and: [ { age: { $gt: 30 } }, { status: 'active' } ] }, { score: { $lt: 50 } } ] } -> Option C
  4. Quick Check:

    Nested $and inside $or matches complex logic [OK]
Hint: Use nested $and inside $or for combined conditions [OK]
Common Mistakes:
  • Using $and instead of $or for main condition
  • Wrong object instead of array syntax
  • Mixing $or and $and incorrectly