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 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?;

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

  • FindOptions instancia que ordena los documentos coincidentes por author en 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);
}

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);
}

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.

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

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

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