Visão geral
Neste guia, você pode aprender como usar o driver Ruby para recuperar dados de uma coleção MongoDB usando operações de leitura. Você pode chamar o método find
em uma coleção para recuperar documentos que correspondam a um conjunto de critérios.
Dados de amostra
Os exemplos neste guia utilizam a coleção do companies
no banco de dados do sample_training
a partir dosconjuntos de dados de amostra do Atlas. Para acessar essa coleção a partir do seu aplicação Ruby, crie um objeto Mongo::Client
que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis database
e collection
:
database = client.use('sample_training') collection = database[:companies]
Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .
Encontrar documentos
Para recuperar documentos de uma coleção, use o método find
. Este método usa um parâmetro de filtro de query e retorna um objeto Mongo::Collection::View
, que representa a query. O driver adia a execução da query até que você obtenha os resultados usando métodos como first
ou each
. Depois de solicitar os resultados, o driver envia a consulta para o servidor e retorna um objeto Mongo::Cursor
do qual você pode acessar os resultados.
Você pode encadear métodos de opção ao método find
para refinar os resultados da operação.
Dica
Para saber mais sobre filtros de query, consulte o guia Especificar uma query .
Localizar vários documentos
Para encontrar vários documentos em uma coleção, passe um filtro de queries para o método find
que especifica os critérios dos documentos que você deseja recuperar.
O exemplo a seguir usa o método find
para localizar todos os documentos nos quais o campo founded_year
tem o valor 1970
:
results = collection.find(founded_year: 1970)
Quando você chama o método each
no objeto Mongo::Collection::View
que representa a consulta, o driver retorna um objeto Mongo::Cursor
. Um cursor é um mecanismo que permite que um aplicação itere sobre os resultados do banco de dados enquanto mantém apenas um subconjunto deles na memória em determinado momento. Os cursores são úteis quando o método find
retorna uma grande quantidade de documentos.
O código a seguir chama o método each
para iterar nos resultados da 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", ...}
Observação
Localizar todos os documentos
Para localizar todos os documentos em uma coleção, chame o método find
sem passar um filtro de query:
results = collection.find
Encontrar um documento
Para localizar um único documento em uma coleção, chame o método find
e passe um filtro de query que especifique os critérios do documento que você deseja localizar. Em seguida, encadeie o método first
a find
.
Se o filtro de query corresponder a mais de um documento, o método first
recuperará o primeiro documento correspondente dos resultados da operação.
O exemplo a seguir encadeia o método first
a find
para localizar o primeiro documento no qual o campo name
tem o 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", ...}
Dica
Ordem de classificação
O método first
retorna o primeiro documento em ordem natural no disco se nenhum critério de classificação for especificado.
Modificar comportamento de localização
Você pode encadear métodos de opção ao método find
para modificar os resultados da operação. A tabela a seguir descreve algumas dessas opções:
Opção | Descrição |
---|---|
| 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 |
O exemplo a seguir usa o método find
para localizar todos os documentos nos quais o campo number_of_employees
tem o valor 1000
. O exemplo utiliza a opção limit
para retornar um 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 obter uma lista completa de opções, consulte a documentação da API para o método de localização.
Informações adicionais
Para saber mais sobre filtros de query, consulte o guia Especificar uma query .
Para exibir exemplos de código que recuperam documentos usando o driver Ruby, consulte Documentos de query.
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: