Limite o número de resultados retornados
Nesta página
Visão geral
Neste guia, você pode aprender como usar o MongoDB Rust Driver para executar operações de limite. Estas operações especificam o número de documentos retornados de uma operação de leitura.
Use o método limit()
para limitar o número de documentos que uma operação de leitura pode gerar. A operação retornará menos documentos se não houver documentos suficientes presentes para atingir o limite especificado.
Se você usar o método limit()
com o método skip()
, o salto será aplicado primeiro e o limite será aplicado somente aos documentos restantes. Para saber mais sobre pular operações, consulte o guia Ignorar resultados retornados.
Dados de amostra para exemplos
Os exemplos deste guia utilizam o seguinte Book
estruturado como um modelo para documentos na coleção books
:
struct Book { name: String, author: String, length: i32, }
O seguinte código mostra como inserir dados de amostra na coleção books
:
let uri = "connection string"; let client = Client::with_uri_str(uri).await?; let my_coll: Collection<Book> = client.database("db").collection("books"); let books = vec![ Book { id: 1, name: "The Brothers Karamazov".to_string(), author: "Dostoyevsky".to_string(), length: 824, }, Book { id: 2, name: "Atlas Shrugged".to_string(), author: "Rand".to_string(), length: 1088, }, Book { id: 3, name: "Les Misérables".to_string(), author: "Hugo".to_string(), length: 1462, }, Book { id: 4, name: "A Dance with Dragons".to_string(), author: "Martin".to_string(), length: 1104, }, ]; my_coll.insert_many(books).await?;
Limitar documentos
Você pode especificar o número máximo de documentos para retornar em uma query ou em um pipeline de agregação .
Esta seção descreve como limitar os resultados das seguintes maneiras:
Método limit(): Encadeie o
limit()
método aofind()
métodoEstrutura FindOptions: use a
limit
opçãoAggregation pipeline: Crie um pipeline que use o
$limit
estágio
exemplo de método limit()
Para limitar o número de documentos retornados, você pode encadear o método limit()
ao método find()
.
Este exemplo executa uma operação find()
que executa as seguintes ações:
Classifica os resultados em ordem crescente de seus valores de campo
length
Limita os resultados aos três primeiros documentos
let mut cursor = my_coll .find(doc! {}) .sort(doc! { "length": 1 }) .limit(3).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Book { name: "The Brothers Karamazov", author: "Dostoyevsky", length: 824 } Book { name: "Atlas Shrugged", author: "Rand", length: 1088 } Book { name: "A Dance with Dragons", author: "Martin", length: 1104 }
Exemplo de opções
Alternativamente, se você estiver configurando e reutilizando opções para sua query, você poderá utilizar o FindOptions
. Defina o campo limit
da estrutura FindOptions
usando o método construtor de opções limit()
. Em seguida, encadeie o método with_options()
ao método find()
e passe sua estrutura FindOptions
como parâmetro para o método with_options()
.
Este exemplo executa uma operação find()
que executa as seguintes ações:
Filtra os resultados para incluir apenas documentos em que o campo
length
é maior que1000
Classifica os resultados em ordem crescente de seus valores de campo
length
Limita os resultados aos dois primeiros documentos
let filter = doc! { "length": { "$gt": 1000 } }; let find_options = FindOptions::builder() .sort(doc! { "length": 1 }) .limit(2) .build(); let mut cursor = my_coll.find(filter).with_options(find_options).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Book { name: "Atlas Shrugged", author: "Rand", length: 1088 } Book { name: "A Dance with Dragons", author: "Martin", length: 1104 }
Exemplo de agregação
Você pode usar o estágio $limit
em um pipeline de agregação para limitar os resultados retornados. Para saber mais sobre as operações de agregação , consulte o Guia de agregação.
Este exemplo executa um pipeline de agregação que executa as seguintes ações:
Classifica os resultados em ordem decrescente de seus valores de campo
length
Limita os resultados retornados aos dois primeiros documentos
let pipeline = vec![ doc! { "$match": {} }, doc! { "$sort": { "length": -1 } }, doc! { "$limit": 2 }, ]; let mut cursor = my_coll.aggregate(pipeline).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Document({"_id": Int32(3), "name": String("Les Misérables"), "author": String("Hugo"), "length": Int32(1462)}) Document({"_id": Int32(4), "name": String("A Dance with Dragons"), "author": String("Martin"), "length": Int32(1104)})
Informações adicionais
Para saber mais sobre as operações mencionadas neste guia, consulte os seguintes guias:
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: