Especifique documentos a serem devolvidos
Nesta página
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
sort(): 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 restaurants
collection no sample_restaurants
banco de dados dos conjuntos de dados de amostra do Atlas . Para acessar essa collection a partir do seu aplicação Scala, crie um MongoClient
que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis database
collection
e:
val database: MongoDatabase = mongoClient.getDatabase("sample_restaurants") val collection: MongoCollection[Document] = database.getCollection("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, use o método limit()
fornecido pela classe FindObservable
. Depois de chamar o método find()
, encadeie o método limit()
para modificar o comportamento da operação.
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:
val filter = equal("cuisine", "Italian") collection.find(filter).limit(5).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Isle Of Capri Resturant", "restaurant_id": "40364373"} {"_id": {"$oid": "..."}, ... , "name": "Marchis Restaurant", "restaurant_id": "40364668"} {"_id": {"$oid": "..."}, ... , "name": "Crystal Room", "restaurant_id": "40365013"} {"_id": {"$oid": "..."}, ... , "name": "Forlinis Restaurant", "restaurant_id": "40365098"} {"_id": {"$oid": "..."}, ... , "name": "Angelo Of Mulberry St.", "restaurant_id": "40365293"}
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, use o método sort()
fornecido pela classe FindObservable
. Depois de chamar o método find()
, encadeie o método sort()
para modificar o comportamento da operação.
Ao chamar sort()
, passe o campo para classificar os resultados e a direção de classificação. Você pode utilizar o método ascending()
para classificar valores do mais baixo para o mais alto ou o método descending()
para classificá-los 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
:
val filter = equal("cuisine", "Italian") collection.find(filter).sort(ascending("name")).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "44 Sw Ristorante & Bar", "restaurant_id": "40698807"} {"_id": {"$oid": "..."}, ... , "name": "900 Park", "restaurant_id": "41707964"} {"_id": {"$oid": "..."}, ... , "name": "A Voce", "restaurant_id": "41434084"} ... {"_id": {"$oid": "..."}, ... , "name": "Zucchero E Pomodori", "restaurant_id": "41189590"}
Ignorar
Para ignorar um número específico de documentos antes de retornar os resultados da query, utilize o método skip()
fornecido pela classe FindObservable
. Depois de chamar o método find()
, encadeie o método skip()
para modificar o comportamento da operação.
O exemplo a seguir retorna todos os documentos que têm um valor de campo borough
de "Manhattan"
e ignora os primeiros 10
documentos:
val filter = equal("borough", "Manhattan") collection.find(filter).skip(10).subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Cafe Metro", "restaurant_id": "40363298"} {"_id": {"$oid": "..."}, ... , "name": "Lexler Deli", "restaurant_id": "40363426"} {"_id": {"$oid": "..."}, ... , "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:
val filter = equal("cuisine", "Italian") collection.find(filter) .limit(5) .skip(10) .sort(ascending("name")) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"There was an error: $e"))
{"_id": {"$oid": "..."}, ... , "name": "Acqua", "restaurant_id": "40871070"} {"_id": {"$oid": "..."}, ... , "name": "Acqua Restaurant", "restaurant_id": "41591488"} {"_id": {"$oid": "..."}, ... , "name": "Acqua Santa", "restaurant_id": "40735858"} {"_id": {"$oid": "..."}, ... , "name": "Acquista Trattoria", "restaurant_id": "40813992"} {"_id": {"$oid": "..."}, ... , "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 Scala 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 a recuperação de documentos, consulte o guia Recuperar dados .
Para obter mais informações sobre como especificar uma query, consulte o guia Especificar uma 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: