Visão geral
Neste guia, você pode aprender como usar o driver Kotlin para recuperar dados de uma coleção MongoDB usando operações de leitura. Você pode chamar o método find() para recuperar documentos que correspondam a um conjunto de critérios especificados em um filtro de query.
Dados de amostra
Os exemplos neste guia utilizam a coleção do movies no banco de dados do sample_mflix a partir doconjunto de dados de amostra do Atlas. Para saber como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte o guia Get Started.
A seguinte classe de dados Kotlin modela os documentos nesta coleção:
data class Movie(val title: String, val runtime: Int, val imdb: IMDB){ data class IMDB(val rating: Double) }
A seguinte classe de dados Kotlin modela os resultados retornados pelos exemplos neste guia:
data class Results(val title: String)
Encontrar operação
O método find() recupera documentos de uma coleção. Este método usa um filtro de query e retorna todos os documentos correspondentes. Um filtro de query é um documento que especifica os critérios que o driver usa para corresponder aos documentos da coleção.
Para saber mais sobre filtros de query, consulte o guia Especificar uma query .
Exemplo de encontrar um documento
O exemplo a seguir encadeia o método firstOrNull() à chamada de método find() para localizar o primeiro documento no qual o valor do campo name é "The Room":
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) .firstOrNull() if (resultsFlow == null) { println("No results found."); } else { println(resultsFlow) }
Movie(title=The Room, runtime=99, imdb=IMDB(rating=3.7))
Exemplo de localização de documentos
Este exemplo utiliza o método find() para localizar todos os documentos nos quais o valor do campo runtime é menor que 15. A operação find() retorna um objeto FindFlow , que você pode iterar usando o método collect(), conforme mostrado no exemplo a seguir:
val projectionFields= Projections.fields( Projections.include(Movie::title.name, Movie::imdb.name), Projections.excludeId() ) val resultsFlow = collection.withDocumentClass<Results>() .find(lt(Movie::runtime.name, 15)) .projection(projectionFields) resultsFlow.collect { println(it) }
Movie(title=Meshes of the Afternoon, runtime=14, imdb=IMDB(rating=8.0)) Movie(title=The Band Concert, runtime=9, imdb=IMDB(rating=7.9)) Movie(title=What's Opera, Doc?, runtime=7, imdb=IMDB(rating=8.3)) ...
Observação
Localizar todos os documentos
Para encontrar todos os documentos em uma coleção, passe um filtro vazio para o método find() :
val resultsFlow = collection.withDocumentClass<Results>() .find()
Modificar comportamento de localização
Você pode modificar o comportamento do método find() encadeando métodos a uma instância FindFlow. A tabela a seguir descreve os métodos comumente usados para modificar query:
Método | Descrição |
|---|---|
| Limits the number of documents to return per batch. To learn more about
batch size, see cursor.batchSize()
in the MongoDB Server manual. |
| Sets the collation options for the query. |
| Processes each element in the flow and applies the given lambda. |
| Specifies a string to attach to the query. This can help you trace and interpret the
operation in the server logs and in profile data. |
| Returns the first document that matches the query or throws a MongoClientException
if no matching documents exist. |
| Returns the first document that matches the query or null if no matching documents exist. |
| Specifies the index to use for the query. |
| Limits the number of documents to be returned from the query. |
| Sets the number of documents to skip. |
| Defines the sort criteria to apply to the query. |
O exemplo a seguir encadeia o método limit() para limitar o número de documentos retornados pela query para 10:
val projectionFields= Projections.fields( Projections.include(Movie::title.name, Movie::imdb.name), Projections.excludeId() ) val resultsFlow = collection.withDocumentClass<Results>() .find() .projection(projectionFields) .limit(10)
Para obter uma lista completa dos métodos que modificam o comportamento do,find() consulte a classe FindFlow na documentação da API do driver Kotlin .
Informações adicionais
Para saber mais sobre filtros de queries, consulte Especificar uma query.
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: