$nor$norperforms a logicalNORoperation on an array of one or more query expression and selects the documents that fail all the query expressions in the array. The$norhas the following syntax:{ $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }
Examples
$nor Query with Two Expressions
Consider the following query which uses only the $nor operator:
db.inventory.find( { $nor: [ { price: 1.99 }, { sale: true } ] } )
This query will return all documents that:
contain the
pricefield whose value is not equal to1.99and contain thesalefield whose value is not equal totrueorcontain the
pricefield whose value is not equal to1.99but do not contain thesalefield ordo not contain the
pricefield but contain thesalefield whose value is not equal totrueordo not contain the
pricefield and do not contain thesalefield
$nor and Additional Comparisons
Consider the following query:
db.inventory.find( { $nor: [ { price: 1.99 }, { qty: { $lt: 20 } }, { sale: true } ] } )
This query will select all documents in the inventory collection
where:
the
pricefield value does not equal1.99andthe
qtyfield value is not less than20andthe
salefield value is not equal totrue
including those documents that do not contain these field(s).
The exception in returning documents that do not contain the field
in the $nor expression is when the $nor operator is
used with the $exists operator.
$nor and $exists
Compare that with the following query which uses the
$nor operator with the $exists operator:
db.inventory.find( { $nor: [ { price: 1.99 }, { price: { $exists: false } }, { sale: true }, { sale: { $exists: false } } ] } )
This query will return all documents that:
contain the
pricefield whose value is not equal to1.99and contain thesalefield whose value is not equal totrue