$not
On this page
$not
$not
performs a logicalNOT
operation on the specified<operator-expression>
and selects the documents that do not match the<operator-expression>
. This includes documents that do not contain thefield
.
Compatibility
You can use $not
for deployments hosted in the following
environments:
MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud
MongoDB Enterprise: The subscription-based, self-managed version of MongoDB
MongoDB Community: The source-available, free-to-use, and self-managed version of MongoDB
Syntax
The $not
operator has the following form:
{ field: { $not: { <operator-expression> } } }
Consider the following example:
db.inventory.find( { price: { $not: { $gt: 1.99 } } } )
This query will select all documents in the inventory
collection where:
the
price
field value is less than or equal to1.99
orthe
price
field does not exist
{ $not: { $gt: 1.99 } }
is different from the $lte
operator. { $lte: 1.99 }
returns only the documents where
price
field exists and its value is less than or equal to
1.99
.
Remember that the $not
operator only affects other
operators and cannot check fields and documents independently. So,
use the $not
operator for logical disjunctions and the
$ne
operator to test the contents of fields directly.
Behavior
$not
and Data Types
The operation of the $not
operator is consistent with the
behavior of other operators but may yield unexpected results with some
data types like arrays.
$not
and Regular Expressions
$not
operator can perform logical NOT
operation on:
Regular expression objects (i.e.
/pattern/
)For example, the following query selects all documents in the
inventory
collection where theitem
field value does not start with the letterp
.db.inventory.find( { item: { $not: /^p.*/ } } ) $regex
operator expressionFor example, the following query selects all documents in the
inventory
collection where theitem
field value does not start with the letterp
.db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } ) driver language's regular expression objects
For example, the following PyMongo query uses Python's
re.compile()
method to compile a regular expression:import re for noMatch in db.inventory.find( { "item": { "$not": re.compile("^p.*") } } ): print noMatch