$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
El operador $in tiene el siguiente formato:
{ 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 field tiene un arreglo, el operador $in selecciona los documentos cuyo field tiene un arreglo que contiene al menos un elemento que coincide con un valor en el arreglo especificado. Por ejemplo, <value1>, <value2>, y así sucesivamente.
$in compara cada parámetro con cada document de la colección, lo que puede causar problemas de rendimiento. Para mejorar el rendimiento, crea un índice en el field que desees query. Un índice permite a MongoDB crear límites para cada elemento de $in y buscar de manera más eficiente.
Nota
Este document describe el operador del query $in. Para el operador de agregación $in, consulta $in (operador de expresión).
Consultar datos en Atlas con MongoDB
Para los datos almacenados en MongoDB Atlas, se puede utilizar el operador MongoDB Search de inclusión (IN) al realizar consultas de $search. Ejecutar $in después de $search tiene un rendimiento inferior que ejecutar $search con el operador in Operator.
Para obtener más información sobre la versión de búsqueda de MongoDB de este Operador, consulta el in Operador en la documentación de Atlas.
Ejemplos
Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.
Match Values
Esta query selecciona documentos en la colección movies donde el valor del campo rated es "G" o "TV-G":
db.movies.find( { rated: { $in: ["G", "TV-G"] } }, { _id: 0, title: 1 } )
[ { title: 'The Great Train Robbery' }, { title: 'A Corner in Wheat' }, { title: 'From Hand to Mouth' }, { title: 'One Week' }, { title: 'The Devil to Pay!' }, { title: 'Footlight Parade' }, { title: 'Gold Diggers of 1935' }, { title: 'Naughty Marietta' }, { title: 'Modern Times' }, { title: 'Gone with the Wind' }, { title: 'Fantasia' }, { title: 'The Man Who Came to Dinner' }, { title: 'National Velvet' }, { title: 'Alice in Wonderland' }, { title: 'The Member of the Wedding' }, { title: 'Seven Brides for Seven Brothers' }, { title: 'Around the World in Eighty Days' }, { title: 'The King and I' }, { title: 'A King in New York' }, { title: 'Ben-Hur' } ]
Aunque puedes escribir la consulta utilizando el operador $or, se recomienda usar el operador $in en lugar del operador $or para realizar comprobaciones de igualdad en el mismo campo.
Empareja valores en un arreglo
La siguiente operación updateMany() establece el campo familyFriendly en true cuando el arreglo rated tiene al menos un elemento que coincide con "G" o "TV-G":
db.movies.updateMany( { rated: { $in: ["G", "TV-G"] } }, { $set: { familyFriendly: true } } )
{ acknowledged: true, insertedId: null, matchedCount: 536, modifiedCount: 536, upsertedCount: 0 }
Para obtener más ejemplos sobre la consulta de arreglos, consulte:
Para obtener ejemplos adicionales sobre query, consulta Documentos de query.
Usa $in con una Expresión Regular
El operador $in puede seleccionar documentos utilizando expresiones regulares con el formato /pattern/.
Esta query selecciona documentos en la colección movies donde el campo plot ya sea comienza con Alien o contiene sci-fi:
db.movies.find( { plot: { $in: [ /^Alien/ , /sci-fi/ ] } }, { _id: 0, title: 1, plot: 1 } )
[ { plot: 'Aliens come to Earth seeking scientists to help them in their war.', title: 'This Island Earth' }, { plot: 'Censored by the Polish authorities, this film was reedited and new footage added. It begins with a sci-fi motif: abstract images and electronic music take the viewer from ruins of Lebanon ...', title: 'Rece do gèry' }, { plot: 'An idyllic sci-fi future has one major drawback: life must end at 30.', title: "Logan's Run" }, { plot: "Four horror/sci-fi segments directed by four famous directors which are their own versions of classic stories from Rod Serling's landmark television series.", title: 'Twilight Zone: The Movie' }, { plot: 'Aliens who look like clowns come from outer space and terrorize a small town.', title: 'Killer Klowns from Outer Space' }, ... ]