Overview
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.
Datos de muestra para ejemplos
Los ejemplos en esta guía utilizan lo siguiente Book struct como modelo para documentos en la colección books:
struct Book { name: String, author: String, length: i32, }
El siguiente código muestra cómo insertar datos 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 { name: "The Brothers Karamazov".to_string(), author: "Dostoyevsky".to_string(), length: 824, }, Book { name: "Atlas Shrugged".to_string(), author: "Rand".to_string(), length: 1088, }, Book { name: "Les Misérables".to_string(), author: "Hugo".to_string(), length: 1462, }, Book { name: "A Dance with Dragons".to_string(), author: "Martin".to_string(), length: 1104, }, ]; my_coll.insert_many(books, None).await?;
Omitir documentos
Puede omitir los resultados recuperados por una query, o puede omitir resultados dentro de una canalización de agregación.
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 para ordenar resultados.
Query Results Ejemplo
Para omitir documentos, puedes inicializar una instancia de FindOptions y especificar la cantidad de documentos que deseas omitir usando el método skip(). Luego, pasa tu estructura FindOptions como parámetro al método find().
Este ejemplo ejecuta una operación find() que realiza las siguientes acciones:
Ordena los resultados en orden ascendente de los valores del campo
authorOmite los dos primeros documentos
Devuelve los documentos restantes
let find_options = FindOptions::builder() .sort(doc! { "author": 1 }) .skip(2) .build(); let mut cursor = my_coll.find(doc! {}, find_options).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 }
Ejemplo de agregación
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 los valores del campo
authorOmite 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, None).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Document({"_id": ObjectId("..."), "name": String("Les Misérables"), "author": String("Hugo"), "length": Int32(1462)}) Document({"_id": ObjectId("..."), "name": String("A Dance with Dragons"), "author": String("Martin"), "length": Int32(1104)}) Document({"_id": ObjectId("..."), "name": String("Atlas Shrugged"), "author": String("Rand"), "length": Int32(1088)})
Información Adicional
Para obtener más información sobre las operaciones mencionadas en esta guía, consulta las siguientes guías:
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: