Docs Menu
Docs Home
/ /

$not

$not

$not performs a logical NOT operation on the specified <operator-expression> and selects the documents that do not match the <operator-expression>. This includes documents that do not contain the field.

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

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 price field value is less than or equal to 1.99 or

  • the price field 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 } }

The $not operator can yield unexpected results when used with an array. To match documents based on multiple false conditions, use $nor.

$not supports logical NOT operations on:

  • Regular expression objects, such as /pattern/.

    The following query selects documents in the inventory collection where the item field value does not start with the letter p:

    db.inventory.find( { item: { $not: /^p.*/ } } )
  • $regex operator expressions.

    For example, the following query selects all documents in the inventory collection where the item field value does not start with the letter p.

    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

Back

$nor

On this page