Classificar resultados
Nesta página
Visão geral
Neste guia, você pode aprender como usar o MongoDB Rust Driver para executar operações de classificação para especificar a ordem dos resultados da operação de leitura.
Use o método sort()
ao criar opções para alterar a ordem em que as operações de leitura retornam documentos. O método sort()
diz ao MongoDB para ordenar documentos devolvidos pelos valores de um ou mais campos em uma determinada direção. Para classificar os documentos retornados por um campo em ordem crescente (o mais baixo primeiro), use um valor de 1
. Para classificar em ordem decrescente (o maior primeiro), use -1
. Se você não especificar uma classificação, o MongoDB não garante a ordem dos resultados da query.
Dados de amostra para exemplos
Os exemplos deste guia utilizam o seguinte Book
estruturado como um modelo para documentos na coleção books
:
struct Book { name: String, author: String, length: i32, }
O seguinte código mostra como inserir dados de amostra na coleção 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?;
Métodos de classificação
Você pode classificar os resultados recuperados por uma query ou classificar os resultados dentro de uma aggregation pipeline.
Encadeie o método sort()
ao método find()
para classificar os resultados recuperados pela query, conforme mostrado no exemplo a seguir:
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); }
Opções
Alternativamente, você pode utilizar o método sort()
da estrutura FindOptions
.
O seguinte exemplo executa uma operação do find()
com o seguinte comportamento:
Classifica os resultados em ordem crescente dos valores do campo
author
Pula o primeiro documento
Retorna os 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); }
Agregação
Para classificar seus resultados dentro de um pipeline de agregação , crie um estágio do $sort
e passe a lista de estágios para o método aggregate()
.
O exemplo a seguir mostra como criar um estágio $sort
que classifica os documentos em ordem crescente pelos valores do 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); }
Direção de classificação
A direção da sua classificação pode ser ascendente ou descendente. Uma classificação crescente ordena seus resultados do menor para o maior. Uma classificação decrescente ordena seus resultados do maior para o menor.
A seguinte lista contém exemplos de dados classificados em ordem crescente:
Números: 1, 2, 3, 43, 43, 55, 120
Datas: 10/03/1990, 01/1995, 30/10/2005, 21/12/2005
Palavras (ASCII): Banana, endro, cenoura, pepino, homus
A seguinte lista contém exemplos de dados classificados em ordem decrescente:
Números: 100, 30, 12, 12, 9, 3, 1
Datas: 01/2020, 11/12/1998, 10/12/1998, 22/07/1975
Palavras (ASCII reverso): pêra, Uva, Maçã, Queque
As subseções a seguir mostram como especificar esses critérios de classificação.
Ascendente
Para especificar uma classificação ascendente, passe o campo pelo qual você deseja classificar e 1
para o método sort()
.
Exemplo
O exemplo a seguir especifica uma classificação crescente no 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 }
Descendente
Para especificar uma classificação decrescente, passe o campo pelo qual você deseja classificar e -1
para o método sort()
.
Exemplo
O exemplo seguinte especifica uma classificação decrescente no 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 }
Informações adicionais
Para saber mais sobre as operações mencionadas neste guia, consulte o seguinte:
Documentação da API
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: