Definition
$not$notperforms a logicalNOToperation 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 } } } )
The example selects all documents in the inventory collection where:
the
pricefield value is less than or equal to1.99orthe
pricefield does not exist
{ $not: { $gt: 1.99 } } differs 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.
Use the $not operator with another operator expression. To use
$not for an inequality check, use:
{ price: { $not: { $eq: 1.99 } } }
The preceding query is equivalent to:
{ price: { $ne: 1.99 } }
The following query is invalid because it compares a field without an operator:
{ price: { $not: 1.99 } }
Behavior
Arrays
The $not operator can yield unexpected results when used with an
array. To match documents based on multiple false conditions, use
$nor.
Regular Expressions
$not supports logical NOT operations on:
Regular expression objects, such as
/pattern/.The following query selects documents in the
inventorycollection where theitemfield value does not start with the letterp:db.inventory.find( { item: { $not: /^p.*/ } } ) $regexoperator expressions.For example, the following query selects all documents in the
inventorycollection where theitemfield value does not start with the letterp.db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } ) Driver language 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