Menu Docs
Página inicial do Docs
/ / /
Driver de fluxos reativos do Java
/

Acessar dados de um cursor

Nesta página

  • Visão geral
  • Acesse o conteúdo do cursor iterativamente
  • Recuperar todos os documentos
  • Cursores persistentes
  • Documentação da API

Neste guia, você pode aprender como acessar dados de um cursor usando o driver Java Reactive Streams.

Um cursor é um mecanismo que retorna os resultados de uma operação de leitura em lotes iteráveis. Como um cursor contém apenas um subconjunto de documentos a qualquer momento, os cursores reduzem o consumo de memória e o uso da largura de banda da rede.

No driver Java Reactive Streams, alguns fluxos são apoiados por cursores. O tamanho dos lotes usados nesses cursores subjacentes depende da demanda solicitada no Subscription para o Publisher. O tamanho do lote dos dados contidos por cada cursor subjacente pode ser configurado utilizando o método FindPublisher.batchSize() .

Os exemplos neste guia usam a collection sample_restaurants.restaurants dos conjuntos 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 deIntrodução .

Importante

Biblioteca do Reator do Projeto

Este guia usa a biblioteca Project Reactor para consumir Publisher instâncias do retornadas pelos métodos de driver Java Reactive Streams. Para saber mais sobre a biblioteca do Projeto Reactor e como usá-la, consulte Introdução na documentação do Reactor. Para saber mais sobre como usamos os métodos da biblioteca do Project Reactor neste guia, consulte o guia Gravar dados no MongoDB .

Para iterar sobre o conteúdo de um cursor, use o método Flux.from() , como mostrado no exemplo a seguir:

FindPublisher<Document> findPublisher = collection.find();
Flux.from(findPublisher)
.doOnNext(x -> System.out.println(x.getString("name")))
.blockLast();

Aviso

Se o número e o tamanho dos documentos retornados pela sua query excederem a memória disponível do aplicativo, seu programa falhará. Se você espera um conjunto de resultados grande, acesse o cursor iterativamente.

Para recuperar todos os documentos de um cursor, converta o cursor em um List, como mostrado no exemplo a seguir:

FindPublisher<Document> findPublisher = collection.find(Filters.eq("name", "Dunkin' Donuts"));
List<Document> resultsList = Flux.from(findPublisher).collectList().block();

Ao fazer query em uma collection limitada, você pode usar um cursor persistente que permanece aberto depois que o cliente esgota os resultados em um cursor. Para criar um cursor persistente em uma collection limitada, passe um valor de CursorType.TailableAwait para o método cursorType() de um objeto FindPublisher .

O exemplo a seguir cria um cursor persistente em uma collection e imprime seu conteúdo:

FindPublisher<Document> findPublisher = collection.find().cursorType(CursorType.TailableAwait);
Flux.from(findPublisher)
.doOnNext(System.out::println)
.blockLast();

Para saber mais sobre cursores tailable e seu uso, consulte o guia Cursores tailable no manual do MongoDB Server .

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

Voltar

Valores de campo distintos