El operador MongoDB IN es un operador que nos sirve para simular un operador MongoDB OR con una lista de posibles valores. Es decir, nos evitaría el escribir OR filtro 1 OR filtro 2… Eso sí, siempre y cuando sea sobre el mismo campo del documento.
La estructura de un operador MongoDB IN es la siguiente:
db.coleccion.find({campo:{$in:['valor1','valor2',...,'valorN']}});
Vemos que la primera parte del filtro es el campo sobre el que queremos aplicar el operador MongoDB, mientras que la otra el el operador MongoDB en si mismo.
Si vemos la parte del operador MongoDB IN podemos observar que es sencilla ya que es un array de los valores sobre los que aplicaremos el filtro separados por comas.
Si volvemos a nuestra colección de ejemplo de ciudades:
{ "_id" : ObjectId("525ab02733b01a66a9dcbc5b"), "ciudad" : "Madrid", "habitantes" : 3233527 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5c"), "ciudad" : "Barcelona", "habitantes" : 1620943 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5d"), "ciudad" : "Valencia", "habitantes" : 797028 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5e"), "ciudad" : "Sevilla", "habitantes" : 702355 } { "_id" : ObjectId("525ab02733b01a66a9dcbc5f"), "ciudad" : "Zaragoza", "habitantes" : 679624 }
Vamos a atacar el campo ciudad indicando una lista de posibles valores. De esta forma la consulta MongoDB IN se quedaría de la siguiente forma:
cursor = db.ciudades.find({ciudad:{$in:['Avila','Zamora','Madrid']}});
Ya solo nos queda ver el resultado de la consulta recorriendo el cursor:
while (cursor.hasNext()){
printjson(cursor.next());
}
Ya hemos visto en este sencillo ejemplo como utilizar el operador MongoDB IN para consultar por varios valores de un campo.