Você pode recuperar um único documento em uma coleção encadeando os métodos find() e first() em um objeto MongoCollection. Você pode passar um filtro de queries para o método find() para fazer query e retornar documentos que correspondam ao filtro na coleção. Se você não incluir um filtro, o MongoDB retornará todos os documentos na coleção.
Para obter mais informações sobre como fazer query no MongoDB com o driver Kotlin , veja nossoguia sobre como fazer query de documentos.
Você também pode encadear outros métodos para o método find(), como sort() que organiza os documentos correspondentes em uma ordem especificada e projection() que configura os campos incluídos nos documentos retornados.
Para obter mais informações sobre o método de sort(), veja nosso guia de classificação. Para obter mais informações sobre o método de projection(), veja nosso guia de projeções
O método find() retorna uma instância do FindFlow, uma classe que oferece vários métodos para acessar, organizar e percorrer os resultados.
FindFlow também obtém métodos de sua interface de delegado Flow da biblioteca Kotlin corrotina, como first() e firstOrNull(). O método firstOrNull() retorna o primeiro documento dos resultados recuperados ou null se não houver resultados. O método first() retorna o primeiro documento ou lança uma exceção NoSuchElementException se nenhum documento corresponder à query.
Para obter mais informações sobre como acessar dados de um fluxo com o driver Kotlin, consulte nosso guia sobre como acessar dados de um fluxo.
Exemplo
O trecho a seguir encontra um único documento da coleta movies. Ele usa os seguintes objetos e métodos:
Um filtro de queries que é passado para o método
find(). O filtroeqcorresponde apenas a filmes com o título que corresponde exatamente ao texto"The Room".Uma classificação que organiza documentos correspondentes em ordem decrescente por classificação, portanto, se nossa query corresponder a vários documentos, o documento retornado será o que tiver a classificação mais alta.
Uma projeção que inclui os objetos nos campos
titleeimdb, e exclui o campo_idutilizando o método auxiliarexcludeId().
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.client.model.Filters.eq import com.mongodb.client.model.Filters.lt import com.mongodb.client.model.Projections import com.mongodb.client.model.Sorts import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.runBlocking import usageExamples.find.Results data class Movie(val title: String, val runtime: Int, val imdb: IMDB) { data class IMDB(val rating: Double) } data class Results(val title: String, val imdb: Movie.IMDB) 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") val projectionFields= Projections.fields( Projections.include(Movie::title.name, Movie::imdb.name), Projections.excludeId() ) val resultsFlow = collection.withDocumentClass<Results>() .find(eq(Movie::title.name, "The Room")) .projection(projectionFields) .sort(Sorts.descending("${Movie::imdb.name}.${Movie.IMDB::rating.name}")) .firstOrNull() if (resultsFlow == null) { println("No results found."); } else { println(resultsFlow) } mongoClient.close() }
Para obter mais informações sobre as classes e métodos mencionados nesta página, consulte a seguinte documentação da API: