Docs Menu
Docs Home
/ /

Ordenar resultados

En esta guía, puede aprender a utilizar el controlador MongoDB Rust para realizar operaciones de clasificación para especificar el orden de los resultados de su operación de lectura.

Uso el sort() Método al crear opciones para cambiar el orden en que las operaciones de lectura devuelven los documentos. El método sort() indica a MongoDB que ordene los documentos devueltos según los valores de uno o más campos en una dirección determinada. Para ordenar los documentos devueltos por un campo en orden ascendente (de menor a mayor), utilice el valor 1. Para ordenar en orden descendente (de mayor a menor), utilice -1. Si no especifica un orden, MongoDB no garantiza el orden de los resultados de la consulta.

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

Puede ordenar los resultados recuperados por una consulta o puede ordenar los resultados dentro de un canal de agregación.

Encadene el método sort() al método find() para ordenar los resultados recuperados por la consulta, 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);
}

Alternativamente, puede 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 los resultados dentro de una secuencia de agregación, cree una etapa $sort y pase la lista de etapas al método aggregate().

El siguiente ejemplo muestra cómo crear una etapa $sort que ordena los 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 descendente:

  • 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 ordenamiento ascendente, pase el campo por el cual 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 una clasificación descendente, pase el campo por el cual desea 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, consulte 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

  • agregar()

  • Opciones agregadas

Volver

Texto de query

En esta página