Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

$not (query predicate operador)

$not

$not realiza una operación NOT lógica sobre los <operator-expression> especificados y selecciona los documentos que no coinciden con el <operator-expression>. Esto incluye documentos que no contienen el field.

Puedes usar $not para implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

El operador $not tiene la siguiente forma:

{ field: { $not: { <operator-expression> } } }

Considera el siguiente ejemplo:

db.movies.find( { runtime: { $not: { $gt: 180 } } } )

El ejemplo selecciona todos los documentos de la colección movies donde:

  • el valor del campo runtime es menor o igual a 180 o

  • el campo runtime no existe

{ $not: { $gt: 180 } } difiere del operador $lte. { $lte: 180 } devuelve solo aquellos documentos en los cuales el campo runtime existe y su valor es menor o igual que 180.

Use el operador $not con otra expresión de operador. Para utilizar $not para una comprobación de desigualdad, usa:

{ runtime: { $not: { $eq: 120 } } }

El query anterior es equivalente a:

{ runtime: { $ne: 120 } }

La siguiente query no es válida porque compara un campo sin un operador:

{ runtime: { $not: 120 } }

El operador $not puede arrojar resultados inesperados cuando se utiliza con un arreglo. Para comparar documentos basado en múltiples condiciones falsas, utiliza $nor.

Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.

$not admite operaciones lógicas NOT en:

  • Objetos de expresiones regulares, como /pattern/.

    El siguiente ejemplo devuelve películas en las que runtime es superior a 1000 minutos y title no comienza con la letra T. Como $not también busca coincidencias en documentos que no contienen el campo title, la query devuelve películas incluso cuando no hay datos de título disponibles:

    db.movies.find(
    { title: { $not: /^T/ }, runtime: { $gt: 1000 } },
    { _id: 0, title: 1, runtime: 1 }
    )
    [
    { title: 'Centennial', runtime: 1256 },
    { title: 'Baseball', runtime: 1140 }
    ]
  • $regex expresiones de operador.

    Las siguientes dos consultas devuelven películas en las que runtime es mayor que 1000 minutos y title no comienza con la letra T. La primera consulta pasa una string a $regex:

    db.movies.find(
    { title: { $not: { $regex: "^T" } }, runtime: { $gt: 1000 } },
    { _id: 0, title: 1, runtime: 1 }
    )
    [
    { title: 'Centennial', runtime: 1256 },
    { title: 'Baseball', runtime: 1140 }
    ]

    La segunda consulta pasa una expresión regular literal a $regex:

    db.movies.find(
    { title: { $not: { $regex: /^T/ } }, runtime: { $gt: 1000 } },
    { _id: 0, title: 1, runtime: 1 }
    )
    [
    { title: 'Centennial', runtime: 1256 },
    { title: 'Baseball', runtime: 1140 }
    ]
  • Objetos de expresión regular del lenguaje del controlador.

    Por ejemplo, el siguiente PyMongo query utiliza el método re.compile() de Python para compilar una expresión regular:

    import re
    for noMatch in db.inventory.find( { "item": { "$not": re.compile("^p.*") } } ):
    print noMatch

Volver

$nor

En esta página