Bird
Raised Fist0
MongoDBquery~5 mins

$nin for not in set in MongoDB - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What does the $nin operator do in MongoDB?

The $nin operator selects documents where the value of a field is not in the specified array of values.

Click to reveal answer
beginner
How would you find documents where the field color is not 'red', 'blue', or 'green' using $nin?
{ color: { $nin: ['red', 'blue', 'green'] } }

This query returns documents where color is any value except 'red', 'blue', or 'green'.

Click to reveal answer
intermediate
Can $nin be used with fields that contain arrays?

Yes, $nin checks if none of the values in the field's array are in the specified array. If any value matches, the document is excluded.

Click to reveal answer
intermediate
What happens if you use $nin with an empty array like { field: { $nin: [] } }?

The query matches all documents because no values are excluded.

Click to reveal answer
beginner
Is $nin the opposite of $in?

Yes, $nin selects documents where the field's value is not in the given array, while $in selects documents where the field's value is in the array.

Click to reveal answer
Which MongoDB operator selects documents where a field's value is NOT in a list of values?
A$nin
B$in
C$eq
D$ne
What will the query { age: { $nin: [20, 30, 40] } } return?
ADocuments where age is 20, 30, or 40
BDocuments where age is not 20, 30, or 40
CDocuments where age is exactly 20
DDocuments where age is missing
If a field contains an array, how does $nin behave?
AMatches if any element is in the array
BMatches if all elements are in the array
CMatches if none of the elements are in the array
DDoes not work with arrays
What does { field: { $nin: [] } } match?
ANo documents
BAll documents
CDocuments where field is null
DDocuments where field is an empty array
Which operator is the direct opposite of $nin?
A$ne
B$in
C$eq
D$exists
Explain how the $nin operator works in MongoDB queries.
Think about how you exclude certain items from a list.
You got /3 concepts.
    Describe a real-life example where you might use $nin in a database query.
    Imagine you want to find all fruits except apples and bananas.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the MongoDB operator $nin do in a query?
      easy
      A. Selects documents where the field's value is in the specified array
      B. Selects documents where the field's value is NOT in the specified array
      C. Updates documents with values in the specified array
      D. Deletes documents where the field's value is in the specified array

      Solution

      1. Step 1: Understand the purpose of $nin

        The $nin operator is used to filter documents where a field's value is NOT included in a given list of values.
      2. Step 2: Compare with other operators

        Unlike $in which selects values inside the array, $nin excludes those values.
      3. Final Answer:

        Selects documents where the field's value is NOT in the specified array -> Option B
      4. Quick Check:

        $nin excludes values = B [OK]
      Hint: Remember: $nin means NOT in list [OK]
      Common Mistakes:
      • Confusing $nin with $in
      • Thinking it updates or deletes documents
      • Using it to select values inside the array
      2. Which of the following is the correct syntax to find documents where the field status is NOT 'active' or 'pending' using $nin?
      easy
      A. { status: { $nin: ['active', 'pending'] } }
      B. { status: { $nin: 'active', 'pending' } }
      C. { status: { $nin: ['active'] || ['pending'] } }
      D. { status: { $nin: 'active' && 'pending' } }

      Solution

      1. Step 1: Check the correct $nin syntax

        The $nin operator requires an array of values inside square brackets to specify the excluded set.
      2. Step 2: Validate each option

        { status: { $nin: ['active', 'pending'] } } correctly uses an array with two strings. Options B, C, and D have syntax errors or invalid expressions.
      3. Final Answer:

        { status: { $nin: ['active', 'pending'] } } -> Option A
      4. Quick Check:

        Correct array syntax for $nin = A [OK]
      Hint: Use square brackets for arrays in $nin [OK]
      Common Mistakes:
      • Using multiple arguments instead of an array
      • Using logical operators inside $nin
      • Missing square brackets around values
      3. Given the collection products with documents:
      { name: 'Pen', category: 'stationery' }
      { name: 'Apple', category: 'fruit' }
      { name: 'Notebook', category: 'stationery' }
      { name: 'Carrot', category: 'vegetable' }

      What will be the result of this query?
      db.products.find({ category: { $nin: ['fruit', 'vegetable'] } })
      medium
      A. All documents returned
      B. [{ name: 'Apple', category: 'fruit' }, { name: 'Carrot', category: 'vegetable' }]
      C. [] (empty array)
      D. [{ name: 'Pen', category: 'stationery' }, { name: 'Notebook', category: 'stationery' }]

      Solution

      1. Step 1: Understand the $nin filter

        The query excludes documents where category is 'fruit' or 'vegetable'.
      2. Step 2: Identify matching documents

        Documents with category 'stationery' are not in ['fruit', 'vegetable'], so they match. 'Pen' and 'Notebook' have 'stationery'.
      3. Final Answer:

        [{ name: 'Pen', category: 'stationery' }, { name: 'Notebook', category: 'stationery' }] -> Option D
      4. Quick Check:

        Exclude 'fruit' and 'vegetable' = stationery items only [OK]
      Hint: Exclude unwanted categories with $nin array [OK]
      Common Mistakes:
      • Confusing $nin with $in
      • Expecting documents with excluded categories
      • Assuming empty result when some match
      4. You wrote this query to exclude users with roles 'admin' or 'moderator':
      db.users.find({ role: { $nin: 'admin', 'moderator' } })

      But it throws an error. What is the problem?
      medium
      A. The $nin operator requires an array, not multiple arguments
      B. The field name role is misspelled
      C. The query should use $in instead of $nin
      D. MongoDB does not support $nin operator

      Solution

      1. Step 1: Check $nin syntax

        $nin expects a single array argument listing values to exclude.
      2. Step 2: Identify the error in the query

        The query passes two separate string arguments instead of one array, causing syntax error.
      3. Final Answer:

        The $nin operator requires an array, not multiple arguments -> Option A
      4. Quick Check:

        $nin needs array input = C [OK]
      Hint: Always wrap values in an array for $nin [OK]
      Common Mistakes:
      • Passing multiple arguments instead of an array
      • Using wrong operator $in by mistake
      • Assuming $nin is unsupported
      5. You have a collection orders with documents:
      { orderId: 1, status: 'shipped' }
      { orderId: 2, status: 'pending' }
      { orderId: 3, status: 'cancelled' }
      { orderId: 4, status: 'delivered' }

      You want to find orders NOT in statuses 'pending' or 'cancelled' AND exclude orders with orderId 4. Which query correctly uses $nin to achieve this?
      hard
      A. { status: { $nin: ['pending', 'cancelled'] }, orderId: { $ne: 4 } }
      B. { status: { $nin: ['pending', 'cancelled', 4] } }
      C. { status: { $nin: ['pending', 'cancelled'] }, orderId: { $nin: [4] } }
      D. { status: { $nin: ['pending', 'cancelled'] }, orderId: { $in: [4] } }

      Solution

      1. Step 1: Exclude statuses 'pending' and 'cancelled'

        Use { status: { $nin: ['pending', 'cancelled'] } } to exclude these statuses.
      2. Step 2: Exclude orderId 4 using $nin

        Use { orderId: { $nin: [4] } } to exclude orderId 4 as well.
      3. Step 3: Combine conditions

        Both conditions together filter out unwanted statuses and orderId 4.
      4. Final Answer:

        { status: { $nin: ['pending', 'cancelled'] }, orderId: { $nin: [4] } } -> Option C
      5. Quick Check:

        Use $nin on both fields = A [OK]
      Hint: Use separate $nin for each field to exclude multiple sets [OK]
      Common Mistakes:
      • Putting orderId inside status array
      • Using $ne instead of $nin for multiple values
      • Using $in to exclude values