Menu Docs

Listar valores de campo distintos

Você pode listar os valores distintos de um campo de documento em uma coleção chamando o método distinct() em uma instância do Collection . Por exemplo, se os documentos em uma collection contiverem o campo date , você poderá usar o método distinct() para localizar todos os valores possíveis para esse campo na collection.

Passe um nome de campo como parâmetro para o método distinct() para retornar os valores distintos para este campo. Você também pode passar um filtro de query como parâmetro para encontrar valores de campo distintos de apenas um subconjunto de documentos correspondentes. Para saber mais sobre como criar filtros de query, consulte o guia Especificar uma Query .

O distinct() método retorna a lista de valores distintos como um Vec<Bson> tipo , um vetor de BSON valores.

Este exemplo encontra valores distintos para um campo na coleção restaurants do banco de dados sample_restaurants . O método distinct() recupera valores distintos do campo borough no subconjunto de documentos nos quais o valor do campo cuisine é "Turkish".

Você pode acessar os documentos na coleção restaurants como instâncias do tipo Document ou um tipo de dados personalizado. Para especificar qual tipo de dados representa os dados da coleção, substitua o parâmetro de tipo <T> na linha realçada por um dos seguintes valores:

  • <Document>: representa documentos de coleção como documentos BSON

  • <Restaurant>: Representa documentos de coleção como instâncias da estrutura Restaurant, definidas na parte superior do código

Selecione a guia Asynchronous ou Synchronous para ver o código correspondente para cada tempo de execução:

use std::env;
use mongodb::{
bson::{ Document, doc },
Client,
Collection };
use serde::{ Deserialize, Serialize };
#[derive(Serialize, Deserialize, Debug)]
struct Restaurant {
name: String,
cuisine: String,
borough: String,
}
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
let uri = "<connection string>";
let client = Client::with_uri_str(uri).await?;
// Replace <T> with the <Document> or <Restaurant> type parameter
let my_coll: Collection<T> = client
.database("sample_restaurants")
.collection("restaurants");
let filter = doc! { "cuisine": "Turkish" };
let boroughs = my_coll.distinct("borough", filter).await?;
println!("List of field values for 'borough':");
for b in boroughs.iter() {
println!("{:?}", b);
}
Ok(())
}
List of field values for 'borough':
String("Brooklyn")
String("Manhattan")
String("Queens")
String("Staten Island")
use std::env;
use mongodb::{
bson::{ Document, doc },
sync::{ Client, Collection }
};
use serde::{ Deserialize, Serialize };
#[derive(Serialize, Deserialize, Debug)]
struct Restaurant {
name: String,
cuisine: String,
borough: String,
}
fn main() -> mongodb::error::Result<()> {
let uri = "<connection string>";
let client = Client::with_uri_str(uri)?;
// Replace <T> with the <Document> or <Restaurant> type parameter
let my_coll: Collection<T> = client
.database("sample_restaurants")
.collection("restaurants");
let filter = doc! { "cuisine": "Turkish" };
let boroughs = my_coll.distinct("borough", filter).run()?;
println!("List of field values for 'borough':");
for b in boroughs.iter() {
println!("{:?}", b);
}
Ok(())
}
List of field values for 'borough':
String("Brooklyn")
String("Manhattan")
String("Queens")
String("Staten Island")