Menu Docs
Página inicial do Docs
/ / /
Driver de sincronização Java
/ / /

Limite o número de resultados retornados

Nesta página

  • Visão geral
  • Especifique um Limite
  • Combinando pular e limitar

Neste guia, você pode aprender como limitar o número de resultados retornados de operações de leitura com o driver MongoDB Java.

Use limit() para limitar o número de documentos que uma operação de leitura gera. Este método de instância designa o número máximo de documentos que uma operação de leitura pode retornar. Se não houver documentos suficientes para atingir o limite especificado, ele poderá retornar um número menor. Se você usar limit() com o método de instância skip() , o salto será aplicado primeiro e o limite será aplicado somente aos documentos restantes após o salto. Para obter mais informações sobre o método skip() , veja nosso guia sobre Como ignorar documentos gerados.

Os exemplos seguintes demonstram, respectivamente, como inserir dados em uma collection, como utilizar o limit() para restringir o número de documentos retornados e como combinar o limit() com skip() para limitar ainda mais os resultados retornados de uma query.

A seguinte operação insere documentos representando livros em uma collection:

collection.insertMany(Arrays.asList(
new Document().append("_id", 1)
.append("title", "The Brothers Karamazov").append("length", 824)
.append("author", "Dostoyevsky"),
new Document().append("_id", 2)
.append("title", "Les Misérables").append("length", 1462).append("author", "Hugo"),
new Document().append("_id", 3)
.append("title", "Atlas Shrugged").append("length", 1088).append("author", "Rand"),
new Document().append("_id", 4)
.append("title", "Infinite Jest").append("length", 1104).append("author", "Wallace"),
new Document().append("_id", 5)
.append("title", "Cryptonomicon").append("length", 918).append("author", "Stephenson"),
new Document().append("_id", 6)
.append("title", "A Dance with Dragons").append("length", 1104)
.append("author", "Martin")
));

O exemplo a seguir faz query na collection para gerar os três livros mais longos. Primeiro, ele combina todos os documentos com a query e, em seguida, classifica no campo length para gerar livros com comprimentos mais longos antes de livros com comprimentos mais curtos. Por último, ele limita o número de resultados a 3 documentos:

import com.mongodb.client.*;
import org.bson.Document;
import static com.mongodb.client.model.Sorts.descending;
// ...
// define a cursor that will return the first 3 sorted items
MongoCursor<Document> cursor = collection.find()
.sort(descending("length"))
.limit(3)
.iterator();
// print out items
try {
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
}
// close the cursor
finally {
cursor.close();
}

O exemplo de código anterior imprime os três documentos a seguir, classificados por tamanho:

Document{{_id=2, title=Les Misérables, author=Hugo, length=1462}}
Document{{_id=6, title=A Dance with Dragons, author=Martin, length=1104}}
Document{{_id=4, title=Infinite Jest, author=Wallace, length=1104}}

Dica

A ordem em que você chama limit() e sort() não importa porque o driver reordena as chamadas para aplicar primeiro a classificação e o limite depois disso. As duas chamadas a seguir são equivalentes:

collection.find().sort(descending("length")).limit(3);
collection.find().limit(3).sort(descending("length"));

Para ver os próximos três livros mais longos, acrescente o método skip() à sua chamada find(), conforme mostrado no exemplo de código a seguir:

MongoCursor<Document> cursor = collection.find()
.sort(descending("length"))
.limit(3)
.skip(3)
.iterator();

Esta operação retorna os documentos que descrevem o quarto a sexto livros mais longos:

Document{{_id=3, title=Atlas Shrugged, author=Rand, length=1088}}
Document{{_id=5, title=Cryptonomicon, author=Stephenson, length=918}}
Document{{_id=1, title=The Brothers Karamazov, author=Dostoyevsky, length=824}}

É possível combinar skip() e limit() desta forma para implementar a paginação para a sua collection, retornando apenas pequenos subconjuntos da collection de uma só vez.

Observação

Para garantir classificações estáveis em várias consultas, você deve classificar usando uma chave exclusiva (como _id). Caso contrário, uma chamada para skip() e limit() pode produzir resultados imprevisíveis quando combinada com sort().

Por exemplo, considere os seguintes dados:

{ type: "computer", data: "1", serial_no: 235235 }
{ type: "computer", data: "2", serial_no: 235237 }
{ type: "computer", data: "3", serial_no: 235239 }
{ type: "computer", data: "4", serial_no: 235241 }

Se você classificou apenas por type , o(a sort() não garante o mesmo pedido após a devolução. Anexar skip() e limit() ao sort() pode devolver documento diferentes para query diferentes. Nesse caso, a classificação por data ou serial_no garantiria uma classificação estável, pois ambos são chaves exclusivas.

Para obter mais informações sobre os métodos e classes mencionados neste guia, consulte a seguinte documentação da API:

  • FindIterable

  • MongoIterable

  • MongoCursor

  • find()

← Ignorar resultados devolvidos