Overview
En esta guía, puede aprender cómo acceder a los datos de un cursor mediante el controlador Java Reactive Streams.
Un cursor es un mecanismo que devuelve los resultados de una operación de lectura en lotes iterables. Dado que un cursor solo contiene un subconjunto de documentos en un momento dado, reduce el consumo de memoria y el uso del ancho de banda de la red.
En el controlador de flujos reactivos de Java, algunos flujos están respaldados por cursores. El tamaño de los lotes utilizados en estos cursores subyacentes depende de la demanda solicitada en el Subscription Para Publisher. Puede establecer el tamaño del lote de datos que contiene cada cursor subyacente mediante el método FindPublisher.batchSize().
Datos de muestra
Los ejemplos de esta guía utilizan la colección sample_restaurants.restaurants de Conjuntos de datos de muestra de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de muestra, consulte
Guía deinicio rápido.
Importante
Proyecto Reactor librería
Esta guía utiliza la biblioteca Project Reactor para consumir Publisher las instancias devueltas por los métodos del controlador Java Reactive Streams. Para obtener más información sobre la biblioteca Project Reactor y cómo usarla, consulte la sección "Introducción" en la documentación de Reactor. Para obtener más información sobre cómo usamos los métodos de la biblioteca Project Reactor en esta guía, consulte la guía "Escribir datos en MongoDB".
Acceder al contenido del cursor de forma iterativa
Para iterar sobre el contenido de un cursor, utilice el método Flux.from(), como se muestra en el siguiente ejemplo:
FindPublisher<Document> findPublisher = collection.find(); Flux.from(findPublisher) .doOnNext(x -> System.out.println(x.getString("name"))) .blockLast();
Recuperar todos los documentos
Advertencia
Si la cantidad y el tamaño de los documentos devueltos por su consulta exceden la memoria disponible de la aplicación, el programa se bloqueará. Si espera un conjunto de resultados grande, acceda al cursor iterativamente.
Para recuperar todos los documentos de un cursor, convierta el cursor en un List, como se muestra en el siguiente ejemplo:
FindPublisher<Document> findPublisher = collection.find(Filters.eq("name", "Dunkin' Donuts")); List<Document> resultsList = Flux.from(findPublisher).collectList().block();
Cursores con seguimiento
Al consultar una colección limitada, puede usar un cursor adaptable que permanece abierto después de que el cliente agote los resultados de un cursor. Para crear un cursor adaptable en una colección limitada, pase el valor CursorType.TailableAwait al cursorType() método de un FindPublisher objeto.
El siguiente ejemplo crea un cursor adaptable en una colección e imprime su contenido:
FindPublisher<Document> findPublisher = collection.find().cursorType(CursorType.TailableAwait); Flux.from(findPublisher) .doOnNext(System.out::println) .blockLast();
Para obtener más información sobre los cursores adaptables y su uso, consulte la guía Cursores adaptables en el manual del servidor MongoDB.
Documentación de la API
Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API: