$nin$ninSelecciona 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 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 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.
Ejemplos
Para crear la colección inventory utilizada en los ejemplos, ejecute:
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 consulta selecciona todos los documentos de la inventory colección donde quantity no es igual a 5 ni 15 a. La consulta también busca documentos que no tengan el quantity campo.
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
Esta consulta establece el campo exclude en true para los documentos que no tienen 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.