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

$nin (query predicate operador)

$nin

$nin selecciona los documentos donde:

  • el valor del campo especificado no se encuentra en el arreglo especificado o

  • el campo especificado no existe.

Puedes usar $nin 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 $nin tiene la siguiente forma:

{ field: { $nin: [ <value1>, <value2> ... <valueN> ] } }

Si field tiene un arreglo, el operador $nin selecciona los documentos cuyo field tiene un arreglo sin ningún elemento igual a un valor en el arreglo especificado. Por ejemplo, <value1>, <value2>, y así sucesivamente.

Para la comparación de diferentes valores de tipo BSON, consulta el orden de comparación especificado de BSON.

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.

El siguiente ejemplo devuelve películas en las que runtime es mayor que 1000 minutos y rated no está en [ "G", "PG" ]. Debido a que $nin también coincide con documentos que no contienen el campo rated, la query devuelve las películas incluso cuando los datos de calificación no están disponibles:

db.movies.find(
{ rated: { $nin: [ "G", "PG" ] }, runtime: { $gt: 1000 } },
{ _id: 0, title: 1, year: 1, rated: 1 }
)
[
{ title: 'Centennial', year: 1978 },
{
title: 'Baseball',
year: 1994,
rated: 'TV-PG'
}
]

El siguiente ejemplo configura el campo exclude en true para las películas que no tengan "Drama" en su arreglo genres:

db.movies.updateMany(
{ genres: { $nin: [ "Drama" ] } },
{ $set: { exclude: true } }
)
{
acknowledged: true,
insertedId: null,
matchedCount: ...,
modifiedCount: ...,
upsertedCount: 0
}

updateMany() también selecciona un documento cuando el documento no contiene el campo $nin con el que se está haciendo la coincidencia.

El operador de desigualdad $nin no es muy selectivo, ya que a menudo coincide con una gran parte del índice. Como resultado, en muchos casos, puede que un query $nin con un índice no tenga un mejor rendimiento que un query $nin que debe escanear todos los documentos de una colección. Consulta también Crear queries selectivos.

Volver

$ne

En esta página