Ignorar resultados devolvidos
Nesta página
Visão geral
Neste guia, você pode aprender como usar o MongoDB Rust Driver para executar uma operação de leitura que ignora um número especificado de documentos ao retornar resultados.
Dados de amostra para exemplos
Os exemplos nesta aba usam o seguinte struct Book
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?;
Ignorar documentos
Você pode ignorar os resultados recuperados por uma query ou ignorar os resultados dentro de um pipeline de agregação .
Esta seção descreve como ignorar resultados das seguintes maneiras:
Métodoskip() : Encadeie o
skip()
método aofind()
métodoEstrutura FindOptions: Use o
skip()
método construtor de opções para configurar umaFindOptions
estruturaAggregation pipeline: Crie um pipeline que use o
$skip
estágio
Se o número de documentos ignorados exceder o número de documentos correspondentes para uma query, essa query não retornará nenhum documento.
Encontre documentos de retorno de operações em uma ordem natural que não esteja classificada em nenhum campo. Para evitar ignorar documentos aleatórios, use o método sort()
para classificar documentos em um campo com um valor exclusivo antes de definir uma opção de ignorar. Para saber mais, consulte o guia Classificar resultados.
Exemplo de método skip()
Para ignorar documentos, você pode encadear o método skip()
ao método find()
. O método skip()
pega um número inteiro que especifica o número de documentos a serem omitidos desde o início do conjunto de resultados.
Este exemplo executa uma operação find()
que executa as seguintes ações:
Classifica os resultados em ordem crescente de seus valores de campo
author
Pula os dois primeiros documentos
Retorna os documentos restantes
let mut cursor = my_coll .find(doc! {}) .sort(doc! { "author": 1 }) .skip(2).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Book { name: "A Dance with Dragons", author: "Martin", length: 1104 } Book { name: "Atlas Shrugged", author: "Rand", length: 1088 }
Exemplo de opções
Alternativamente, se você estiver configurando e reutilizando opções para sua query, você poderá utilizar o FindOptions
. Defina o campo skip
da estrutura FindOptions
usando o método construtor de opções skip()
. 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:
Classifica os resultados em ordem decrescente de seus valores de campo
name
Pula o primeiro documento
Retorna os documentos restantes
let find_options = FindOptions::builder() .sort(doc! { "name": -1 }) .skip(1) .build(); let mut cursor = my_coll.find(doc! {}).with_options(find_options).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Book { name: "Les Misérables", author: "Hugo", length: 1462 } Book { name: "Atlas Shrugged", author: "Rand", length: 1088 }
Exemplo de agregação
Você pode usar o estágio $skip
em um agregação pipeline para ignorar documentos. 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 crescente de seus valores de campo
author
Pula o primeiro documento
Retorna os documentos restantes
let pipeline = vec![ doc! { "$match": {} }, doc! { "$sort": { "author": 1 } }, doc! { "$skip": 1 }, ]; 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)}) Document({"_id": Int32(2), "name": String("Atlas Shrugged"), "author": String("Rand"), "length": Int32(1088)})
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: