$inEl operador
$inselecciona los documentos donde el valor de un campo es igual a cualquier valor en el arreglo especificado.
Compatibilidad
Puedes usar $in 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
Para especificar una expresión $in, utiliza el siguiente prototipo:
{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }
Para la comparación de diferentes valores de tipo BSON, consulta el orden de comparación especificado de BSON.
Si el field contiene un arreglo, entonces el operador $in selecciona los documentos cuyo field contiene un arreglo que tiene al menos un elemento que coincide con un valor en el arreglo especificado (por ejemplo, <value1>, <value2>, etc.).
El operador $in compara cada parámetro con cada documento en la colección, lo que puede provocar problemas de rendimiento. Para mejorar el rendimiento:
- Se recomienda que limite el número de parámetros que se pasan al
$inOperador con decenas de valores. Usar cientos de parámetros o más puede afectar negativamente el rendimiento de la consulta.
Crea un índice en el
fieldque deseas consultar.
Nota
Este documento describe el operador de la query $in. Para el operador de agregación $in, consulte $in (operador de expresión).
Consultar datos en Atlas mediante la búsqueda de Atlas
Para los datos almacenados en MongoDB Atlas, puede usar el operador "Buscar en Atlas" al ejecutar $search consultas. Ejecutar $in después $search de tiene menor rendimiento que ejecutar con $search el operador "In".
Para obtener más información sobre la versión Atlas Search de este operador, consulte el operador en la documentación de Atlas.
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" ] } ] )
Utilice el $in operador para hacer coincidir valores
Considera el siguiente ejemplo:
db.inventory.find( { quantity: { $in: [ 5, 15 ] } }, { _id: 0 } )
Este query selecciona todos los documentos en la colección inventory donde el valor del campo quantity es 5 o 15.
{ item: 'Erasers', quantity: 15, tags: [ 'school', 'home' ] }, { item: 'Books', quantity: 5, tags: [ 'school', 'storage', 'home' ] }
Aunque puedes guardar esta query utilizando el operador $or, utiliza el operador $in en vez del operador $or cuando realices comprobaciones de igualdad en el mismo campo.
Utilice el $in operador para hacer coincidir valores en una matriz
La siguiente updateMany() Operación establece el campo exclude a false cuando el arreglo tags tiene al menos un elemento que coincide con "home" o "school".
db.inventory.updateMany( { tags: { $in: [ "home", "school" ] } }, { $set: { exclude: false } } )
Ejemplo de salida:
{ item: 'Pens', quantity: 350, tags: [ 'school', 'office' ], exclude: false }, { item: 'Erasers', quantity: 15, tags: [ 'school', 'home' ], exclude: false }, { item: 'Books', quantity: 5, tags: [ 'school', 'storage', 'home' ], exclude: false }
Para obtener más ejemplos sobre la consulta de arreglos, consulte:
Para obtener ejemplos adicionales sobre query, consulta Documentos de query.
Utilice el $in operador con una expresión regular
El operador $in puede especificar valores coincidentes utilizando expresiones regulares de la forma /pattern/. No puedes usar expresiones del operador $regex dentro de un $in.
Considera el siguiente ejemplo:
db.inventory.find( { tags: { $in: [ /^be/, /^st/ ] } } )
Este query selecciona todos los documentos en la colección inventory donde el campo tags contiene una string que comienza con be o st o un arreglo con al menos un elemento que comienza con be o st.