Overview
En esta guía, aprenderás cómo usar MongoDB Rust Driver para realizar operaciones de ordenamiento que especifiquen el orden de los resultados de tus operaciones de lectura.
Usa el sort() método al crear opciones para cambiar el orden en que las operaciones de lectura devuelven documentos. El método sort() le dice a MongoDB que ordene los documentos devueltos por los valores de uno o más campos en una determinada dirección. Para ordenar los documentos devueltos en orden ascendente (el menor primero) por un campo, utilice un valor de 1. Para ordenar en orden descendente (el mayor primero) en su lugar, utilice -1. Si no especificas un orden, MongoDB no garantiza el orden de los resultados de la query.
Datos de muestra para ejemplos
Los ejemplos en esta guía usan la siguiente estructura Book 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 { 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, None).await?;
Métodos para ordenar
Puedes ordenar los resultados recuperados por una query o puedes ordenar los resultados dentro de un pipeline de agregación.
Este ejemplo muestra cómo llamar al método find() con los siguientes parámetros:
filtro de query que coincide con todos los documentos
FindOptionsinstancia que ordena los documentos coincidentes porauthoren orden ascendente
let opts = FindOptions::builder() // 1 for ascending order, -1 for descending order .sort(doc! { "author": 1 }) .build(); let mut cursor = my_coll .find(doc! {}, opts) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Agregación
Para ordenar tus resultados dentro de una pipeline de agregación, crea una etapa $sort y pasa la lista de etapas al método aggregate().
El siguiente ejemplo muestra cómo crear una etapa $sort que ordena documentos en orden ascendente según los valores del campo author:
let pipeline = vec![ doc! { "$match": {} }, // 1 for ascending order, -1 for descending order doc! { "$sort": { "author": 1 } } ]; let mut cursor = my_coll.aggregate(pipeline, None).await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Dirección de clasificación
La dirección de tu ordenamiento puede ser ascendente o descendente. Un orden ascendente organiza tus resultados de menor a mayor. Una ordenación descendente organiza tus resultados de mayor a menor.
La siguiente lista contiene ejemplos de datos ordenados en orden ascendente:
Numbers: 1, 2, 3, 43, 43, 55, 120
Dates: 1990-03-10, 1995-01-01, 2005-10-30, 2005-12-21
Palabras (ASCII): Banana, Eneldo, zanahoria, pepino, hummus
La siguiente lista contiene ejemplos de datos ordenados en orden descendiente:
Numbers: 100, 30, 12, 12, 9, 3, 1
Dates: 2020-01-01, 1998-12-11, 1998-12-10, 1975-07-22
Palabras (ASCII inverso): pera, uvas, manzana, Queso
Las siguientes subsecciones muestran cómo especificar estos criterios de clasificación.
Ascendente
Para especificar un orden ascendente, se debe pasar el campo por el que se desea ordenar y 1 al método sort().
Ejemplo
El siguiente ejemplo especifica una ordenación ascendente en el campo name:
let opts = FindOptions::builder() .sort(doc! { "name": 1 }) .build(); let mut cursor = my_coll .find(doc! {}, opts) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Book { "_id": 4, "name": "A Dance with Dragons", "author": Martin, "length": 1104 } Book { "_id": 2, "name": "Atlas Shrugged", "author": Rand, "length": 1088 } Book { "_id": 3, "name": "Les Miserables", "author": Hugo, "length": 1462 } Book { "_id": 1, "name": "The Brothers Karamazov", "author": Dostoevsky, "length": 824 }
Descendente
Para especificar un orden descendente, pasa el campo por el que deseas ordenar y -1 al método sort().
Ejemplo
El siguiente ejemplo especifica una ordenación descendente en el campo name:
let opts = FindOptions::builder() .sort(doc! { "name": -1 }) .build(); let mut cursor = my_coll .find(doc! {}, opts) .await?; while let Some(result) = cursor.try_next().await? { println!("{:?}", result); }
Book { "_id": 1, "name": "The Brothers Karamazov", "author": Dostoevsky, "length": 824 } Book { "_id": 3, "name": "Les Miserables", "author": Hugo, "length": 1462 } Book { "_id": 2, "name": "Atlas Shrugged", "author": Rand, "length": 1088 } Book { "_id": 4, "name": "A Dance with Dragons", "author": Martin, "length": 1104 }
Información Adicional
Para obtener más información sobre las operaciones mencionadas en esta guía, consulta lo siguiente:
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: