Menu Docs
Página inicial do Docs
/ / /
Scala
/

Especifique documentos a serem devolvidos

Nesta página

  • Visão geral
  • Dados de amostra
  • Limite
  • Sort
  • Ignorar
  • Combinar Limite, Classificar e Ignorar
  • Informações adicionais
  • Documentação da API

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

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 .

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.

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"}

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"}
...

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.

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 .

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Especificar uma query