En MongoDB, el $nin
El operador de consulta selecciona los documentos donde el valor del campo no está en la matriz especificada o donde el campo no existe.
Ejemplo
Supongamos que tenemos una colección llamada products
con los siguientes documentos:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] } { "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Podemos usar el $nin
operador para seleccionar solo aquellos documentos que no tienen un _id
específico valores.
Código de ejemplo:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
})
Resultado:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
En este caso, solo queríamos documentos que no contener un _id
valor de 1
, 2
, o 3
.
Ejemplo 2
Aquí hay otro ejemplo. Esta vez usamos $nin
contra un campo diferente.
db.products.find({
sizes: { $nin: [ "L" ] }
})
Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
En este ejemplo, aplicamos $nin
a los sizes
campo.
Observe que se devolvió el documento 6, aunque no tiene un sizes
campo. Esto es exactamente como se esperaba:si el campo no existe, se incluye en el $nin
resultados.
La comparación de diferentes tipos se evalúa de acuerdo con el orden de comparación de BSON.
Ejemplo de agregación
Podemos usar la misma sintaxis cuando usamos $match
operador de tubería de agregación.
Código de ejemplo:
db.products.aggregate(
[
{ $match: { _id: { $nin: [ 1, 2, 3 ] } } }
]
)
Resultado:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Y aquí está de nuevo al consultar los sizes
campo:
db.products.aggregate(
[
{ $match: { sizes: { $nin: [ "L" ] } } }
]
)
Resultado:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Expresiones regulares
Puede usar expresiones regulares en la consulta usando el formulario /pattern/
.
Ejemplo:
db.products.find({
sizes: { $nin: [ /^X/ ] }
})
Resultado:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
En este ejemplo, devuelvo todos los documentos que no tienen sizes
campo que comienza con X
.