Visão geral
Neste guia, você pode aprender a especificar quais documentos retornar de uma operação de leitura encadeando os seguintes métodos ao método find
:
limite: especifica o número máximo de documentos para retornar de uma consulta
classificar: especifica a ordem de classificação para os documentos devolvidos
skip: especifica o número de documentos a ignorar antes de retornar os resultados da query
Dados de amostra
Os exemplos neste guia usam a collection restaurants
no banco de dados sample_restaurants
dos conjuntos 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_restaurants') collection = database[:restaurants]
Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .
Limite
Para especificar o número máximo de documentos retornados de uma operação de leitura, aplique a opção limit
à operação. Você pode definir essa opção encadeando o método de preparação limit
ao método find
.
O exemplo a seguir encontra todos os restaurantes que têm um cuisine
valor de campo de 'Italian'
e limita os resultados a 5
documentos:
filter = { cuisine: 'Italian' } collection.find(filter) .limit(5) .each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Philadelhia Grille Express", "restaurant_id"=>"40364305"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Isle Of Capri Restaurant", "restaurant_id"=>"40364373"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Marchis Restaurant", "restaurant_id"=>"40364668"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Crystal Room", "restaurant_id"=>"40365013"} {"_id"=>BSON::ObjectId('...'), ... , name"=>"Forlinis Restaurant", "restaurant_id"=>"40365098"}
Dica
O exemplo anterior retorna os cinco primeiros documentos correspondidos pela query de acordo com sua ordem natural no banco de banco de dados. A seção a seguir descreve como devolver os documentos em uma ordem especificada.
Sort
Para retornar documentos em uma ordem especificada, aplique a opção sort
à operação de leitura. Você pode definir essa opção encadeando o método de preparação sort
ao método find
.
Ao chamar sort
, passe o campo para classificar os resultados e a direção de classificação. Um valor de direção de classificação de 1
classifica os valores do mais baixo para o mais alto, e um valor de -1
os classifica do mais alto para o mais baixo.
O exemplo a seguir retorna todos os documentos que têm um valor de campo cuisine
de 'Italian'
, classificados em ordem crescente de valores de campo name
:
filter = { cuisine: 'Italian' } collection.find(filter) .sort(name: 1) .each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"(Lewis Drug Store) Locanda Vini E Olii", "restaurant_id"=>"40804423"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"101 Restaurant And Bar", "restaurant_id"=>"40560108"} ... {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Zucchero E Pomodori", "restaurant_id"=>"41189590"}
Ignorar
Para ignorar um número especificado de documentos antes de retornar os resultados da query, aplique a opção skip
à operação de leitura. Você pode definir essa opção encadeando o método de preparação skip
ao método find
.
O exemplo a seguir retorna todos os documentos que têm um valor de campo borough
de 'Manhattan'
e ignora os primeiros 10
documentos:
filter = { borough: 'Manhattan' } collection.find(filter) .skip(10) .each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Cafe Metro", "restaurant_id"=>"40363298"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Lexler Deli", "restaurant_id"=>"40363426"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Domino'S Pizza", "restaurant_id"=>"40363644"} ...
Combinar Limite, Classificar e Ignorar
Você pode encadear os métodos limit
, sort
e skip
a uma única chamada de método find
. Isso permite que você defina um número máximo de documentos classificados para retornar da operação de leitura, ignorando um número específico de documentos antes de retornar.
O exemplo a seguir retorna 5
documentos com um valor cuisine
de 'Italian'
. Os resultados são classificados em ordem crescente pelo valor do campo name
, ignorando os primeiros 10
documentos:
filter = { cuisine: 'Italian' } collection.find(filter) .limit(5) .skip(10) .sort(name: 1) .each { |doc| puts doc }
{"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua", "restaurant_id"=>"40871070"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua Restaurant", "restaurant_id"=>"41591488"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acqua Santa", "restaurant_id"=>"40735858"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acquista Trattoria", "restaurant_id"=>"40813992"} {"_id"=>BSON::ObjectId('...'), ... , "name"=>"Acquolina Catering", "restaurant_id"=>"41381423"}
Observação
A ordem em que você chama esses métodos não altera os documentos que são devolvidos. O driver Ruby reordena automaticamente as chamadas para executar primeiro a operação de classificação, a operação de ignorar em seguida e, em seguida, a operação de limite.
Informações adicionais
Para obter mais informações sobre como recuperar documentos, consulte o guia Localizar documentos.
Para obter mais informações sobre como especificar uma query, consulte o guia Especificar uma query .
Documentação da API
Para saber mais sobre o método find
e suas opções, consulte a documentação da API.