sql >> Base de Datos >  >> NoSQL >> MongoDB

Operador de consulta MongoDB $nin

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 .