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

Operador de consulta MongoDB $in

En MongoDB, el $in El operador de consulta selecciona los documentos donde el valor de un campo es igual a cualquier valor en la matriz especificada.

El $in el operador de consulta no debe confundirse con $in operador de canalización de agregación, que devuelve un valor booleano que indica si un valor específico está en la matriz.

Ejemplo

Supongamos que tenemos una colección llamada products con los siguientes documentos:

{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 4, "prod" : "Shirt", "sizes" : "M" }
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

Podemos usar el $in operador para seleccionar solo aquellos documentos con un _id específico valores.

Código de ejemplo:

db.products.find({ 
  _id: { $in: [ 1, 2, 3 ] } 
})

Resultado:

{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }

En este caso, solo queríamos documentos que contuvieran un _id valor de 1 , 2 , o 3 .

Ejemplo 2

Aquí hay otro ejemplo. Esta vez usamos $in contra un campo diferente.

db.products.find({ 
  sizes: { $in: [ "L" ] } 
})

Resultado:

{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

En este ejemplo, aplicamos $in a los sizes campo.

En este caso, el primer documento tenía el valor como una cadena, mientras que los otros dos documentos lo tenían como un elemento de matriz. De cualquier manera, se devolvieron todos los documentos coincidentes.

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: { $in: [ 1, 2, 3 ] } } }
   ]
)

Resultado:

{ "_id" : 1, "prod" : "Shorts" }
{ "_id" : 2, "prod" : "Jeans", "sizes" : null }
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }

Y aquí está de nuevo al consultar los sizes campo:

db.products.aggregate(
   [
     { $match: { sizes: { $in: [ "L" ] } } }
   ]
)

Resultado:

{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

Expresiones regulares

Puede usar expresiones regulares en la consulta usando el formulario /pattern/ .

Ejemplo:

db.products.find({ 
  sizes: { $in: [ /^X/ ] } 
})

Resultado:

{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] }
{ "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }

En este ejemplo, devuelvo todos los documentos que tienen sizes campo con un valor que es una cadena que comienza con X o una matriz donde al menos uno de los elementos comienza con X .