$nin$ninselecciona los documentos en los que se cumplen estas condiciones: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 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.
Sintaxis
El operador $nin tiene la siguiente forma:
{ field: { $nin: [ <value1>, <value2> ... <valueN> ] } }
Si el field contiene un arreglo, el operador $nin selecciona los documentos cuyo field contiene 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.
Ejemplos
Crear la colección inventory:
db.inventory.insertMany( [ { item: "Pens", quantity: 350, tags: [ "school", "office" ] }, { item: "Erasers", quantity: 15, tags: [ "school", "home" ] }, { item: "Maps", tags: [ "office", "storage" ] }, { item: "Books", quantity: 5, tags: [ "school", "storage", "home" ] } ] )
Selecciona sobre documentos no coincidentes
La siguiente query selecciona todos los documentos de la colección inventory en que quantity no es igual ni a 5 ni a 15.
La query también coincide con documentos que no tienen un campo quantity.
db.inventory.find( { quantity: { $nin: [ 5, 15 ] } }, { _id: 0 } )
Ejemplo de salida:
{ item: 'Pens', quantity: 350, tags: [ 'school', 'office' ] }, { item: 'Maps', tags: [ 'office', 'storage' ] }
Selecciona sobre elementos que no están en un arreglo
Establece el campo exclude en true para los documentos que no tengan la etiqueta "school".
db.inventory.updateMany( { tags: { $nin: [ "school" ] } }, { $set: { exclude: true } } )
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.