Overview
En esta guía, puedes aprender cómo usar el controlador Ruby para recuperar datos de una colección de MongoDB utilizando operaciones de lectura. Se puede llamar al método find en una colección para recuperar documentos que coincidan con un conjunto de criterios.
Datos de muestra
Los ejemplos de esta guía utilizan la colección companies en la base de datos sample_training de los conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde tu aplicación Ruby, crea un objeto Mongo::Client que se conecte a un clúster de Atlas y asigna los siguientes valores a tus variables database y collection:
database = client.use('sample_training') collection = database[:companies]
Para aprender cómo crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulta la guía MongoDB Get Started.
Buscar documentos
Para recuperar documentos de una colección, utiliza el método find. Este método toma un parámetro de filtro de query y retorna un objeto Mongo::Collection::View, que representa la query. El driver pospone la ejecución de la query hasta que se obtienen los resultados utilizando métodos como first o each. Después de que solicites los resultados, el controlador envía la query al servidor y devuelve un objeto Mongo::Cursor desde el que puedes acceder a los resultados.
Puedes encadenar métodos de opción al método find para refinar los resultados de la operación.
Tip
Para obtener más información sobre los filtros de query, consulta la guía Especificar una consulta.
Encuentra varios documentos
Para encontrar varios documentos en una colección, pasar un filtro de query al método find que especifique los criterios de los documentos que desea recuperar.
El siguiente ejemplo utiliza el método find para encontrar todos los documentos en los que el campo founded_year tiene el valor 1970:
results = collection.find(founded_year: 1970)
Cuando llamas al método each en el objeto Mongo::Collection::View que representa la query, el driver devuelve un objeto Mongo::Cursor. Un cursor es un mecanismo que permite que una aplicación itere sobre los resultados de la base de datos mientras retiene sólo un subconjunto de ellos en memoria en un momento dado. Los cursores son útiles cuando tu método find devuelve una gran cantidad de documentos.
El siguiente código llama al método each para iterar sobre los resultados de la query:
results.each do |doc| puts doc end
{"_id"=>BSON::ObjectId('...'), "name"=>"Mitsubishi Motors", "permalink"=>"mitsubishi-motors", "crunchbase_url"=>"http://www.crunchbase.com/company/mitsubishi-motors", "homepage_url"=>"http://www.mitsubishi-motors.com", ...} {"_id"=>BSON::ObjectId('...'), "name"=>"Western Digital", "permalink"=>"western-digital", "crunchbase_url"=>"http://www.crunchbase.com/company/western-digital", "homepage_url"=>"http://www.wdc.com/en", ...} {"_id"=>BSON::ObjectId('...'), "name"=>"Celarayn", "permalink"=>"celarayn", "crunchbase_url"=>"http://www.crunchbase.com/company/celarayn", "homepage_url"=>"http://www.celarayn.es", ...}
Nota
Encuentre todos los documentos
Para encontrar todos los documentos en una colección, llama al método find sin pasar un filtro de query:
results = collection.find
Encuentre un documento
Para encontrar un único documento en una colección, llama al método find y pasa un filtro de query que especifique los criterios del documento que deseas encontrar. Después, encadena el método first con find.
Si el filtro de query coincide con más de un documento, el método first recupera el primer documento coincidente de los resultados de la operación.
En el siguiente ejemplo, se encadena el método first a find para encontrar el primer documento en el que el campo name tiene el valor 'LinkedIn':
document = collection.find(name: 'LinkedIn').first puts document
{"_id"=>BSON::ObjectId('...'), "name"=>"LinkedIn", "permalink"=>"linkedin", "crunchbase_url"=>"http://www.crunchbase.com/company/linkedin", "homepage_url"=>"http://linkedin.com", "blog_url"=>"http://blog.linkedin.com", ...}
Tip
Orden de clasificación
El método first devuelve el primer documento en orden natural en el disco si no se especifica ningún criterio de ordenación.
Modificar el comportamiento de búsqueda
Puedes encadenar métodos de opción al método find para modificar los resultados de la operación. La siguiente tabla describe algunas de estas opciones:
Opción | Descripción |
|---|---|
| Número de documentos a devolver por lote. El valor predeterminado |
| La intercalación que se utilizará para la operación. El valor predeterminado es la intercalación especificada para la colección. |
| Comentario para adjuntar a la operación. |
| Número máximo de documentos que puede devolver la operación. |
| Número de documentos que se deben omitir antes de devolver resultados. |
| El orden en que la operación devuelve los documentos coincidentes. |
El siguiente ejemplo usa el método find para encontrar todos los documentos en los que el campo number_of_employees tiene el valor 1000. El ejemplo utiliza la opción limit para devolver un máximo de 2 resultados:
limit_results = collection.find(number_of_employees: 1000).limit(2) limit_results.each do |doc| puts doc end
{"_id"=>BSON::ObjectId('...'), "name"=>"Akamai Technologies", "permalink"=>"akamai-technologies", "crunchbase_url"=>"http://www.crunchbase.com/company/akamai-technologies", "homepage_url"=>"http://www.akamai.com", ...} {"_id"=>BSON::ObjectId('...'), "name"=>"Yodle", "permalink"=>"yodle", "crunchbase_url"=>"http://www.crunchbase.com/company/yodle", "homepage_url"=>"http://www.yodle.com", ...}
Para obtener una lista completa de opciones, consulta la documentación de la API del método find.
Información Adicional
Para obtener más información sobre los filtros de query, consulta la guía Especificar una consulta.
Para ver ejemplos de código que recuperan documentos utilizando el controlador Ruby, consulta Query Documents.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: