Menu Docs
Página inicial do Docs
/ / /
Driver Scala
/

Recuperar valores de campo distintos

Neste guia, você pode aprender como usar o driver Scala para recuperar os valores distintos de um campo especificado em uma coleção.

Dentro de uma coleção, documentos diferentes podem conter valores diferentes para um único campo. Por exemplo, um documento em uma coleção restaurants tem um valor borough de "Manhattan" e outro tem um valor borough de "Queens". Ao usar o driver Scala, você pode recuperar todos os valores exclusivos que um campo contém em vários documentos em uma coleção.

Os exemplos neste guia utilizam a restaurants coleção do sample_restaurants no banco de dados do a partir dos conjuntos de dados de amostra do Atlas . Para acessar essa collection a partir do seu aplicação Scala, crie um MongoClient que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis database e collection:

val database: MongoDatabase = client.getDatabase("sample_restaurants")
val collection: MongoCollection[Document] = database.getCollection("restaurants")

Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas .

Para recuperar os valores distintos para um campo especificado, chame o método distinct() e passe o nome do campo para o qual você deseja encontrar valores distintos.

O exemplo seguinte recupera os valores distintos do campo borough na coleção restaurants :

collection.distinct("borough")
.subscribe((value: String) => println(value),
(e: Throwable) => println(s"There was an error: $e"))
Bronx
Brooklyn
Manhattan
Missing
Queens
Staten Island

A operação retorna uma instância da classe DistinctObservable , que você pode iterar para acessar cada valor de campo borough distinto . Embora vários documentos tenham o mesmo valor no campo borough, cada valor aparece nos resultados apenas uma vez.

Você pode fornecer um filtro de query para o distinct() método para encontrar valores de campo distintos dentro de um subconjunto de documentos em uma coleção. Um filtro de query é uma expressão que especifica os critérios de pesquisa usados para corresponder a documentos em uma operação. Para obter mais informações sobre como criar um filtro de query,consulte o guia Especificar uma query.

O exemplo a seguir recupera os valores distintos do campo borough para todos os documentos que têm um valor de campo cuisine de "Italian":

val filter = equal("cuisine", "Italian")
collection.distinct("borough", filter)
.subscribe((value: String) => println(value),
(e: Throwable) => println(s"There was an error: $e"))
Bronx
Brooklyn
Manhattan
Queens
Staten Island

Você pode modificar o comportamento do método distinct() encadeando métodos fornecidos pela classe DistinctObservable . A tabela a seguir descreve alguns desses métodos:

Método
Descrição

collation()

Sets the collation to use for the operation.
Parameter Type: Collation

comment()

Attaches a comment to the operation.
Parameter Type: BsonValue or String

first()

Retrieves only the first distinct field value.

O exemplo a seguir recupera os valores distintos do campo name para todos os documentos que têm um valor de campo borough de "Bronx" e um valor de campo cuisine de "Pizza". Em seguida, ele encadeia o método comment() a distinct() para adicionar um comentário à operação:

val filter = and(equal("borough", "Bronx"), equal("cuisine", "Pizza"))
collection.distinct("name", filter)
.comment("Bronx Pizza restaurants")
.subscribe((value: String) => println(value),
(e: Throwable) => println(s"There was an error: $e"))
$1.25 Pizza
18 East Gunhill Pizza
2 Bros
Aenos Pizza
Alitalia Pizza Restaurant
Amici Pizza And Pasta
Angie'S Cafe Pizza
...

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Especifique campos a serem retornados

Nesta página