Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Omitir resultados devueltos

En esta guía, puedes aprender a usar el MongoDB Rust Driver para realizar una operación de lectura que omita una cantidad específica de documentos al devolver los resultados.

Los ejemplos en esta guía utilizan lo siguiente Book Estructura como modelo para los documentos de la colección books:

#[derive(Debug, Serialize, Deserialize)]
struct Book {
name: String,
author: String,
length: i32,
}

El siguiente código muestra cómo insertar datos de muestra en la colección 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?;

Puede omitir los resultados recuperados por una query, o puede omitir resultados dentro de una canalización de agregación.

Esta sección describe cómo omitir los resultados de las siguientes formas:

  • método skip(): encadena el método skip() al método find()

  • FindOptions struct: Utiliza el método del generador de opciones skip() para configurar una estructura FindOptions

  • pipeline de agregación: Crea una canalización que utiliza la etapa $skip

Si el número de documentos omitidos supera el número de documentos coincidentes para una query, entonces esa query no devuelve ningún documento.

Las operaciones de búsqueda devuelven documentos en un orden natural que no está ordenado en ningún campo. Para evitar omitir documentos aleatorios, se debe utilizar el método sort() para ordenar documentos en un campo con un valor único antes de establecer una opción de omisión. Para obtener más información, consulta el Guía deordenamiento de resultados.

Para omitir documentos, puedes encadenar el método skip() al método find(). El método skip() acepta un número entero que especifica la cantidad de documentos a omitir desde el principio del conjunto de resultados.

Este ejemplo ejecuta una operación find() que realiza las siguientes acciones:

  • Ordena los resultados en orden ascendente de sus valores de campo author

  • Omite los dos primeros documentos

  • Devuelve los 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 }

Alternativamente, si estás configurando y reutilizando opciones para tu query, puedes usar FindOptions. Configure el campo skip de la estructura FindOptions utilizando el método de construcción de opciones skip(). Luego, encadena el método with_options() al método find() y pasa tu struct FindOptions como un parámetro al método with_options().

Este ejemplo ejecuta una operación find() que realiza las siguientes acciones:

  • Ordena los resultados en orden descendente según los valores del campo name

  • Omite el primer documento

  • Devuelve los 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 }

Puedes usar la etapa $skip en un pipeline de agregación para omitir documentos. Para aprender más sobre operaciones de agregación, consulte la guía Agregación.

Este ejemplo ejecuta un pipeline de agregación que realiza las siguientes acciones:

  • Ordena los resultados en orden ascendente de sus valores de campo author

  • Omite el primer documento

  • Devuelve los 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)})

Para obtener más información sobre las operaciones mencionadas en esta guía, consulta las siguientes guías:

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Ordenar resultados

En esta página