$nin$ninselecciona los documentos donde:el valor del campo especificado no se encuentra en el arreglo especificado o
el campo especificado no existe.
Compatibilidad
Puedes usar $nin para implementaciones alojadas en los siguientes entornos:
- MongoDB Atlas: El servicio totalmente administrado 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.
Sintaxis
El operador $nin tiene la siguiente forma:
{ field: { $nin: [ <value1>, <value2> ... <valueN> ] } }
Comportamiento
Tipos de corchetes
A diferencia de los operadores de desigualdad ($gt, $gte, $lt y $lte), $nin no utiliza corchetes de tipo. En cambio, coincide con documentos donde el valor del campo no es uno de los valores especificados, independientemente del tipo de valor.
Por ejemplo, { a: { $nin: [ 2, 4 ] } } también coincide con documentos donde a es una cadena.
Hacer coincidir un valor de un arreglo
Si field contiene una matriz, el operador $nin selecciona los documentos cuya field contiene una matriz sin ningún elemento igual a un valor de la matriz especificada. Por ejemplo, <value1>, <value2>, etc.
Ejemplos
Los ejemplos de esta página utilizan datos del conjunto de datos 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 realizó alguna modificación en las bases de datos de muestra, es posible que deba descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.
Selecciona sobre documentos no coincidentes
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 } )
Selecciona sobre elementos que no están en un arreglo
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 } } )
updateMany() también selecciona un documento cuando el documento no contiene el campo con el que coincide $nin.
El operador de desigualdad $nin no es muy selectivo, ya que suele coincidir con una gran parte del índice. Por lo tanto, en muchos casos, una consulta $nin con un índice puede no tener mejor rendimiento que una consulta $nin que debe escanear todos los documentos de una colección. Véase también Crear consultas selectivas.