What if you could exclude many unwanted cases with just one simple command?
Why $nor operator behavior in MongoDB? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have a big list of items and you want to find those that do NOT match several conditions. You try to check each item one by one, crossing off those that meet any condition.
Doing this by hand or with simple filters is slow and confusing. You might miss some items or accidentally include wrong ones because you have to remember to exclude all conditions at once.
The $nor operator lets you say: "Give me items that do NOT match any of these conditions." It combines multiple checks into one clear rule, making your search easy and accurate.
filter items where not (condition1 or condition2)
{ $nor: [ { condition1 }, { condition2 } ] }You can quickly find data that avoids all unwanted cases in one simple query.
Suppose you want to find products that are neither out of stock nor discontinued. Using $nor, you get only available products without complicated checks.
Manually excluding multiple conditions is tricky and error-prone.
$nor combines multiple negative conditions into one query.
This makes data filtering faster, clearer, and more reliable.
Practice
$nor operator do in MongoDB queries?Solution
Step 1: Understand the purpose of
The$nor$noroperator returns documents that do not satisfy any of the given conditions.Step 2: Compare with other logical operators
Unlike$andor$or,$norexcludes documents matching any condition in its array.Final Answer:
Finds documents where none of the specified conditions are true -> Option CQuick Check:
$norexcludes all matching conditions = B [OK]
$nor [OK]- Confusing
$norwith$or - Assuming it returns documents matching any condition
- Thinking it requires all conditions to be true
$nor in a MongoDB query to exclude documents where age is 25 or status is "active"?Solution
Step 1: Recall
$norsyntax$norrequires an array of condition objects inside square brackets.Step 2: Check each option's structure
{ $nor: [ { age: 25 }, { status: "active" } ] } correctly uses an array of conditions. Options B and D use objects incorrectly, and C has invalid array syntax.Final Answer:
{ $nor: [ { age: 25 }, { status: "active" } ] } -> Option DQuick Check:
Array of conditions inside$nor= A [OK]
$nor [OK]- Using curly braces instead of square brackets for conditions
- Passing a single object instead of an array
- Nesting
$orinside$norunnecessarily
[{ "name": "Alice", "age": 30, "status": "active" }, { "name": "Bob", "age": 25, "status": "inactive" }, { "name": "Carol", "age": 35, "status": "active" }]What will be the result of this query?
{ $nor: [ { age: 25 }, { status: "active" } ] }Solution
Step 1: Understand the
The query excludes documents where$norconditionsageis 25 ORstatusis "active".Step 2: Check each document against conditions
Alice: status "active" -> excluded; Bob: age 25 -> excluded; Carol: status "active" -> excluded.Final Answer:
[] (empty array) -> Option AQuick Check:
All documents match at least one condition, so none returned = A [OK]
$nor [OK]- Returning documents that match one condition
- Confusing
$norwith$or - Assuming some documents pass when all match conditions
{ $nor: { age: { $gt: 30 }, status: "inactive" } }What is the problem and how to fix it?
Solution
Step 1: Identify the syntax error
$norexpects an array of condition objects, but here it has a single object.Step 2: Correct the syntax
Wrap each condition inside its own object within an array to fix the error.Final Answer:
The conditions must be inside an array; fix: { $nor: [ { age: { $gt: 30 } }, { status: "inactive" } ] } -> Option BQuick Check:
$norneeds array of conditions = C [OK]
$nor [OK]- Passing a single object instead of an array
- Misusing comparison operators
- Confusing
$norwith$and
[{ "item": "pen", "qty": 10, "status": "A" }, { "item": "pencil", "qty": 5, "status": "D" }, { "item": "notebook", "qty": 15, "status": "A" }, { "item": "eraser", "qty": 0, "status": "D" }]Write a
$nor query to find documents where qty is not 0 and status is not "D". Which query returns the correct documents?Solution
Step 1: Understand the requirement
We want documents whereqtyis NOT 0 andstatusis NOT "D".Step 2: Use
{ $nor: [ { qty: 0 }, { status: "D" } ] } excludes documents with$norto exclude documents withqty0 orstatus"D"qty0 orstatus"D", so it returns documents matching the requirement.Final Answer:
{ $nor: [ { qty: 0 }, { status: "D" } ] } -> Option AQuick Check:
Exclude unwanted values with$nor= D [OK]
$nor to exclude unwanted values directly [OK]- Using $ne inside $nor incorrectly
- Confusing inclusion with exclusion logic
- Using wrong comparison operators inside conditions
