Bird
Raised Fist0
MongoDBquery~10 mins

$in for matching a set 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 the field 'color' matches any value in the list.

MongoDB
db.collection.find({ color: { [1]: ["red", "blue", "green"] } })
Drag options to blanks, or click blank then click option'
A$ne
B$eq
C$in
D$gt
Attempts:
3 left
💡 Hint
Common Mistakes
Using $eq instead of $in will only match a single value, not a list.
Using $gt or $ne will not match multiple values as intended.
2fill in blank
medium

Complete the code to find documents where the 'status' field is either 'active' or 'pending'.

MongoDB
db.users.find({ status: { [1]: ["active", "pending"] } })
Drag options to blanks, or click blank then click option'
A$nin
B$in
C$exists
D$all
Attempts:
3 left
💡 Hint
Common Mistakes
Using $nin will exclude those values instead of including them.
Using $all requires the field to contain all listed values, which is not suitable here.
3fill in blank
hard

Fix the error in the query to correctly find documents where 'category' is one of the specified values.

MongoDB
db.products.find({ category: { [1]: ["electronics", "furniture"] } })
Drag options to blanks, or click blank then click option'
A$nin
B$eq
C$all
D$in
Attempts:
3 left
💡 Hint
Common Mistakes
Using $eq with multiple values causes syntax errors.
Not using an array for multiple values with $in causes errors.
4fill in blank
hard

Fill both blanks to find documents where 'tags' contain any of the specified values.

MongoDB
db.articles.find({ tags: { [1]: ["mongodb", "database"], [2]: true } })
Drag options to blanks, or click blank then click option'
A$in
B$all
C$exists
D$nin
Attempts:
3 left
💡 Hint
Common Mistakes
Using $all instead of $in requires all values to be present, which is stricter.
Omitting $exists might include documents without the 'tags' field.
5fill in blank
hard

Fill all three blanks to find documents where 'status' is in the list and 'score' exists and is greater than 50.

MongoDB
db.records.find({ status: { [1]: ["open", "closed"] }, score: { [2]: true, [3]: 50 } })
Drag options to blanks, or click blank then click option'
A$in
B$exists
C$gt
D$lt
Attempts:
3 left
💡 Hint
Common Mistakes
Using $lt instead of $gt will find scores less than 50.
Omitting $exists might include documents without a 'score' field.

Practice

(1/5)
1.

What does the $in operator do in MongoDB queries?

easy
A. Deletes documents matching a condition
B. Finds documents where a field is greater than a value
C. Updates documents by adding new fields
D. Finds documents where a field matches any value in a given list

Solution

  1. Step 1: Understand the purpose of $in

    The $in operator is used to match documents where a field's value is equal to any value in a specified array.
  2. Step 2: Compare with other options

    Options B, C, and D describe different MongoDB operations unrelated to $in.
  3. Final Answer:

    Finds documents where a field matches any value in a given list -> Option D
  4. Quick Check:

    $in matches any value in list [OK]
Hint: Remember: $in checks if field is in a list [OK]
Common Mistakes:
  • Confusing $in with comparison operators like $gt
  • Thinking $in updates or deletes documents
  • Using $in without an array of values
2.

Which of the following is the correct syntax to find documents where the field color is either "red", "blue", or "green"?

{ color: { $in: ["red", "blue", "green"] } }
easy
A. { color: { $in: ["red", "blue", "green"] } }
B. { color: { $in: "red", "blue", "green" } }
C. { color: { $in: "red|blue|green" } }
D. { color: { $in: { "red", "blue", "green" } } }

Solution

  1. Step 1: Check the correct use of $in syntax

    The $in operator requires an array of values inside square brackets []. { color: { $in: ["red", "blue", "green"] } } correctly uses an array with strings.
  2. Step 2: Identify syntax errors in other options

    { color: { $in: "red", "blue", "green" } } misses brackets for the array. { color: { $in: "red|blue|green" } } uses a string with pipes instead of an array. { color: { $in: { "red", "blue", "green" } } } uses curly braces which is invalid for arrays.
  3. Final Answer:

    { color: { $in: ["red", "blue", "green"] } } -> Option A
  4. Quick Check:

    $in needs an array [OK]
Hint: Always use square brackets [] for $in values [OK]
Common Mistakes:
  • Using strings instead of arrays for $in
  • Using curly braces {} instead of square brackets []
  • Separating values with commas but missing brackets
3.

Given the collection products with documents:

[{ "name": "Pen", "category": "stationery" }, { "name": "Apple", "category": "fruit" }, { "name": "Notebook", "category": "stationery" }, { "name": "Banana", "category": "fruit" }]

What will be the result of this query?

db.products.find({ category: { $in: ["fruit"] } })
medium
A. [{ "name": "Pen", "category": "stationery" }, { "name": "Notebook", "category": "stationery" }]
B. [{ "name": "Apple", "category": "fruit" }, { "name": "Banana", "category": "fruit" }]
C. []
D. All documents in the collection

Solution

  1. Step 1: Understand the query filter

    The query filters documents where the category field is in the array ["fruit"]. This means only documents with category "fruit" will match.
  2. Step 2: Identify matching documents

    Documents with "Apple" and "Banana" have category "fruit", so they are returned. Others are excluded.
  3. Final Answer:

    [{ "name": "Apple", "category": "fruit" }, { "name": "Banana", "category": "fruit" }] -> Option B
  4. Quick Check:

    Filter by category in ["fruit"] returns fruit items [OK]
Hint: Match only documents with field in the given list [OK]
Common Mistakes:
  • Expecting documents with other categories to appear
  • Confusing $in with $nin (not in)
  • Thinking $in matches substrings instead of exact values
4.

What is wrong with this MongoDB query?

db.users.find({ age: { $in: 25, 30, 35 } })
medium
A. The query should use $nin instead of $in
B. The field name age is invalid
C. The $in operator requires an array of values, not separate arguments
D. The query is correct and will return matching documents

Solution

  1. Step 1: Check the syntax of $in usage

    The $in operator expects a single array argument containing values to match. Here, values are passed as separate arguments, which is invalid syntax.
  2. Step 2: Identify the correct syntax

    The correct syntax is { age: { $in: [25, 30, 35] } } with square brackets around the values.
  3. Final Answer:

    The $in operator requires an array of values, not separate arguments -> Option C
  4. Quick Check:

    $in needs an array [OK]
Hint: Always wrap $in values in square brackets [OK]
Common Mistakes:
  • Passing multiple values without an array
  • Confusing $in with other operators
  • Assuming query is valid without brackets
5.

You have a collection orders with documents containing a field status. You want to find all orders where the status is either "pending", "shipped", or "delivered" but exclude those with status "cancelled" or "returned". Which query correctly uses $in and $nin to achieve this?

hard
A. { $or: [ { status: { $in: ["pending", "shipped", "delivered"] } }, { status: { $nin: ["cancelled", "returned"] } } ] }
B. { status: { $in: ["pending", "shipped", "delivered"] }, status: { $nin: ["cancelled", "returned"] } }
C. { status: { $in: ["pending", "shipped", "delivered"] }, $nin: ["cancelled", "returned"] }
D. { status: { $in: ["pending", "shipped", "delivered"], $nin: ["cancelled", "returned"] } }

Solution

  1. Step 1: Understand the need to combine $in and $nin on the same field

    We want documents where status is in one list but not in another. MongoDB does not allow combining $in and $nin inside the same object for a field. Instead, both conditions must be combined using an implicit AND by specifying both in the query object.
  2. Step 2: Analyze each option's structure

    { status: { $in: ["pending", "shipped", "delivered"] }, status: { $nin: ["cancelled", "returned"] } } uses the same field key twice with different operators, which is invalid JSON syntax. { $or: [ { status: { $in: ["pending", "shipped", "delivered"] } }, { status: { $nin: ["cancelled", "returned"] } } ] } uses $or, which applies OR logic, not the required AND. { status: { $in: ["pending", "shipped", "delivered"] }, $nin: ["cancelled", "returned"] } places $nin outside the field, which is invalid. { status: { $in: ["pending", "shipped", "delivered"], $nin: ["cancelled", "returned"] } } tries to combine $in and $nin inside the same object, which is invalid in MongoDB.
  3. Step 3: Correct approach

    The correct way is to combine both conditions using $and or by specifying both operators inside an object using $and or by using the implicit AND by combining conditions in the query object like: { status: { $in: [...] }, status: { $nin: [...] } } is invalid JSON because keys repeat. So the correct query is:
    { status: { $in: [...] }, status: { $nin: [...] } } is invalid.
    Instead, use:
    { status: { $in: [...] }, status: { $nin: [...] } } is invalid.
    So the correct way is:
    { status: { $in: [...] }, $nin: [...] } is invalid.
    Therefore, the correct query is:
    { status: { $in: [...] }, $nin: [...] } is invalid.
    Hence, the only valid way is to use $and operator:
    { $and: [ { status: { $in: [...] } }, { status: { $nin: [...] } } ] }
  4. Final Answer:

    { $and: [ { status: { $in: ["pending", "shipped", "delivered"] } }, { status: { $nin: ["cancelled", "returned"] } } ] } -> Option A (modified)
  5. Quick Check:

    Use $and to combine $in and $nin conditions [OK]
Hint: Use $and to combine multiple conditions on the same field [OK]
Common Mistakes:
  • Repeating the same field key multiple times in query
  • Placing $nin outside the field object
  • Using separate objects for the same field without $and