Overview
En esta guÃa, puedes aprender cómo acceder a datos desde un cursor utilizando el controlador Java Reactive Streams.
Un cursor es un mecanismo que devuelve los resultados de una operación de lectura en lotes iterables. Debido a que un cursor contiene solo un subconjunto de documentos en un momento dado, los cursores reducen tanto el consumo de memoria como el uso del ancho de banda de red.
En el controlador Java Reactive Streams, algunos streams 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 el Publisher. Puedes establecer el tamaño de lote de datos contenido por cada cursor subyacente utilizando el método FindPublisher.batchSize().
Datos de muestra
Los ejemplos de esta guÃa utilizan la colección sample_restaurants.restaurants de los conjuntos de datos de ejemplo de Atlas. Para aprender a crear un clúster gratuito de MongoDB Atlas y cargar los conjuntos de datos de ejemplo, consulte la guÃa de introducción.
Importante
Proyecto Reactor librerÃa
Esta guÃa utiliza la biblioteca Project Reactor para consumir instancias Publisher 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 "Primeros pasos" en la documentación de Reactor. Para obtener más información sobre cómo utilizamos los métodos de la biblioteca Project Reactor en esta guÃa, consulte la guÃa "Escribir datos en MongoDB".
Acceso iterativo al contenido del cursor
Para iterar sobre el contenido de un cursor, debe utilizar 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 superan la memoria disponible de la aplicación, su programa fallará. Si espera un conjunto de resultados grande, acceda al cursor de forma iterativa.
Para recuperar todos los documentos de un cursor, convierte 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 realizar consultas en una colección con lÃmite de tamaño, puede usar un cursor rastreable que permanece abierto después de que el cliente agote los resultados en un cursor. Para crear un cursor rastreable en una colección con lÃmite de tamaño, pase el valor CursorType.TailableAwait al método cursorType() de un objeto FindPublisher.
El siguiente ejemplo crea un cursor con seguimiento 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 con seguimiento y su uso, consulte la guÃa de cursores con seguimiento 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: