Menu Docs
Página inicial do Docs
/ / /
Kotlin Coroutine
/

Recuperar valores distintos de um campo

Você pode recuperar uma lista de valores distintos para um campo em uma coleção ligando para o método distinct() em um objeto MongoCollection . Passe o nome do campo do documento como o primeiro parâmetro e a classe para a qual você deseja converter os resultados como o parâmetro do tipo.

Os seguintes trechos demonstram o método distinct() utilizando a collection movies no reconhecimento de data center de amostra do sample_mflix . Os documentos são modelados com a seguinte classe de dados Kotlin:

data class Movie(
val type: String,
val languages: List<String>,
val countries: List<String>,
val awards: Awards){
data class Awards(val wins: Int)
}

A chamada de método abaixo gera cada valor distinto do campo countries na collection movies :

collection.distinct<String>(Movie::countries.name)

Você pode especificar um campo no documento ou dentro de um documento incorporado usando a notação de ponto. A chamada de método abaixo gera cada valor distinto do campo wins no documento incorporado de awards:

collection.distinct<Int>("${Movie::awards.name}.${Movie.Awards::wins.name}")

Você também pode limitar o conjunto de documentos dos quais sua instância do MongoDB recupera valores distintos com um filtro de query como segundo parâmetro, da seguinte forma:

collection.distinct<String>(Movie::type.name, Filters.eq(Movie::languages.name, "French"))

O método distinct() gera um objeto que implementa a classe DistinctFlow , que contém métodos para acessar, organizar e percorrer os resultados. DistinctFlow delega para a interface Flow da biblioteca Kotlin corrotina, permitindo acesso a métodos como first() e firstOrNull().

Para obter mais informações, consulte nosso guia sobre como acessar dados de um fluxo.

O exemplo a seguir recupera uma lista de valores distintos para o campo documento year da collection movies. Ele usa um filtro de query para corresponder a filmes que incluem "Carl Franklin" como um dos valores na array directors .

Ao executar o exemplo, você verá a saída que relata cada ano distinto de todos os filmes que Carl Franklin foi incluído como diretor.

Observação

Esse exemplo se conecta a uma instância do MongoDB usando um URI de conexão. Para saber mais sobre como se conectar à sua instância do MongoDB, consulte o Guia de conexão.

import com.mongodb.MongoException
import com.mongodb.client.model.Filters
import com.mongodb.kotlin.client.coroutine.MongoClient
import kotlinx.coroutines.runBlocking
data class Movie(val year: Int, val directors: List<String>)
fun main() = runBlocking {
// Replace the uri string with your MongoDB deployment's connection string
val uri = "<connection string uri>"
val mongoClient = MongoClient.create(uri)
val database = mongoClient.getDatabase("sample_mflix")
val collection = database.getCollection<Movie>("movies")
try {
val resultsFlow = collection.distinct<Int>(
Movie::year.name, Filters.eq(Movie::directors.name, "Carl Franklin")
)
resultsFlow.collect { println(it) }
} catch (e: MongoException) {
System.err.println("An error occurred: $e")
}
mongoClient.close()
}
1992
1995
1998
...

Para obter informações adicionais sobre as classes e métodos mencionados nesta página, consulte os seguintes recursos:

  • Documentação da APIdistinct()

  • Fluxo distinto Documentação da API

  • Notação de ponto Entrada manual do servidor

Voltar

Contagem de documentos