Overview
En esta guía, aprenderá a usar el controlador Ruby para recuperar datos de una colección de MongoDB mediante operaciones de lectura. Puede llamar al
find método en una colección para recuperar documentos que coinciden 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 la Conjuntos de datos de muestra de Atlas. Para acceder a esta colección desde su aplicación Ruby, cree un Mongo::Client objeto que se conecte a un clúster de Atlas y asigne los siguientes valores a las variables database collection y:
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 muestra, consulte la guía de introducción a MongoDB.
Buscar documentos
Para recuperar documentos de una colección, utilice el find método. Este método toma un parámetro de filtro de consulta y devuelve un Mongo::Collection::View objeto, que representa la consulta. El controlador pospone la ejecución de la consulta hasta que se obtengan los resultados mediante métodos como first eacho. Tras solicitar los resultados, el controlador envía la consulta al servidor y devuelve un Mongo::Cursor objeto desde el que se puede acceder a ellos.
Puede 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 consulta, consulte la Especifique una guía de 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)
Al llamar al método each en el objeto Mongo::Collection::View que representa la consulta, el controlador devuelve un objeto Mongo::Cursor. Un cursor es un mecanismo que permite a una aplicación iterar sobre los resultados de la base de datos, manteniendo solo un subconjunto de ellos en memoria en un momento dado. Los cursores son útiles cuando el 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 consulta:
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 buscar un solo documento en una colección, llame al método find y pase un filtro de consulta que especifique los criterios del documento que desea encontrar. Luego, encadene el método first a find.
Si el filtro de consulta coincide con más de un documento, el first método recupera el primer documento coincidente de los resultados de la operación.
El siguiente ejemplo 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
Puede 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 |
|---|---|
| The number of documents to return per batch. The default value is 101.Type: Integer |
| The collation to use for the operation. The default value is the collation
specified for the collection. Type: Hash |
| The comment to attach to the operation. Type: Object |
| The maximum number of documents the operation can return. Type: Integer |
| The number of documents to skip before returning results. Type: Integer |
| The order in which the operation returns matching documents. Type: Hash |
El siguiente ejemplo utiliza el método find para buscar todos los documentos cuyo campo number_of_employees tenga 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, consulte la documentación de la API para el método find.
Información Adicional
Para obtener más información sobre los filtros de consulta, consulte la guía Especificar una consulta.
Para ver ejemplos de código que recuperan documentos mediante el controlador Ruby, consulte Consultar documentos.
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: