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
/ /

Ordenar resultados

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.

Los ejemplos en esta guía usan la siguiente estructura Book como modelo para documentos en 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?;

Puedes ordenar los resultados recuperados por una query o puedes ordenar los resultados dentro de un pipeline de agregación.

Encadene el método sort() al método find() para ordenar los resultados obtenidos por la query, como se muestra en el siguiente ejemplo:

let mut cursor = my_coll
.find(doc! {})
// 1 for ascending order, -1 for descending order
.sort(doc! { "author": 1 })
.await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}

Otra opción es utilizar el método sort() de la estructura FindOptions.

El siguiente ejemplo realiza una operación find() con el siguiente comportamiento:

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

  • Omite el primer documento

  • Devuelve los documentos restantes

let find_options = FindOptions::builder()
// 1 for ascending order, -1 for descending order
.sort(doc! { "author": 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);
}

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).await?;
while let Some(result) = cursor.try_next().await? {
println!("{:?}", result);
}

La dirección de ordenación puede ser ascendente o descendente.La ordenación ascendente ordena los resultados de menor a mayor. La ordenación descendente ordena los 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): plátano, 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.

Para especificar un orden ascendente, se debe pasar el campo por el que se desea ordenar y 1 al método sort().

El siguiente ejemplo especifica una ordenación ascendente en el campo name:

let mut cursor = my_coll
.find(doc! {})
.sort(doc! { "name": 1 })
.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 }

Para especificar un orden descendente, pasa el campo por el que deseas ordenar y -1 al método sort().

El siguiente ejemplo especifica una ordenación descendente en el campo name:

let mut cursor = my_coll
.find(doc! {})
.sort(doc! { "name": -1 })
.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 }

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

  • Especifica un query

  • Retrieve Data

  • Operaciones compuestas

  • Agregación

  • Omitir resultados devueltos

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

  • find()

  • FindOptions

  • FindOneOptions

  • Cursor

  • aggregate()

  • AggregateOptions

Volver

Texto de query

En esta página