Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Acceder a datos desde un cursor

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. 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 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 el Publisher. Puede establecer el tamaño del lote de datos contenido por cada cursor subyacente utilizando el método FindPublisher.batchSize().

Los ejemplos en esta guía utilizan la colección sample_restaurants.restaurants de la 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".

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();

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, 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();

Al consultar en una colección con tamaño fijo, puedes usar un cursor con seguimiento que permanece abierto después de que el cliente agota los resultados en un cursor. Para crear un cursor con seguimiento en una colección acotada, pasa un valor de CursorType.TailableAwait al método cursorType() de un objeto FindPublisher.

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.

Para aprender más sobre cualquiera de los métodos o tipos analizados en esta guía, consulta la siguiente documentación de API:

Volver

Valores únicos de campo

En esta página