Docs Menu
Docs Home
/ /

Buscar documentos

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.

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.

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.

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

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.

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

batch_size

The number of documents to return per batch. The default value is 101.
Type: Integer

collation

The collation to use for the operation. The default value is the collation specified for the collection.
Type: Hash

comment

The comment to attach to the operation.
Type: Object

limit

The maximum number of documents the operation can return.
Type: Integer

skip

The number of documents to skip before returning results.
Type: Integer

sort

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.

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.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Especifica un query

En esta página