Docs Menu
Docs Home
/ /
Tutorials
/ / /

Flujos de cambio

MongoDB 3.6 presenta el $changeStream operador de canalización de agregación.

Los flujos de cambios permiten supervisar los cambios en los documentos de una colección. Para mejorar la usabilidad de esta nueva etapa, el tipo MongoCollection incluye un nuevo método watch(). La instancia ChangeStreamPublisher configura el flujo de cambios e intenta reanudarlo automáticamente si encuentra un error potencialmente recuperable.

Debe configurar los siguientes componentes para ejecutar los ejemplos de código de esta guía:

import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoCollection;
import com.mongodb.reactivestreams.client.MongoDatabase;
import com.mongodb.client.model.Aggregates;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.changestream.FullDocument;
import com.mongodb.client.model.changestream.ChangeStreamDocument;
import org.bson.Document;

Importante

Esta guía utiliza las implementaciones Subscriber, que se describen en la Manual de inicio rápido.

Primero, conéctese a una implementación de MongoDB, luego declare y defina las instancias MongoDatabase y MongoCollection.

El siguiente código se conecta a una implementación independiente de MongoDB que se ejecuta en localhost, en el puerto 27017. Luego, define la variable database para referirse a la base de datos test y la variable collection para referirse a la colección restaurants:

MongoClient mongoClient = MongoClients.create();
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("restaurants");

Para obtener más información sobre cómo conectarse a implementaciones de MongoDB, consulte el tutorial Conectarse a MongoDB.

Para crear un flujo de cambios, utilice uno de los métodos MongoCollection.watch().

En el siguiente ejemplo, el flujo de cambios imprime todos los cambios que observa:

collection.watch().subscribe(new PrintDocumentSubscriber());

Las aplicaciones pueden abrir un único flujo de cambios para supervisar todas las colecciones de una base de datos que no pertenecen al sistema. Para crear dicho flujo de cambios, utilice uno de los métodos MongoDatabase.watch().

En el siguiente ejemplo, el flujo de cambios imprime todos los cambios que observa en la base de datos dada:

database.watch().subscribe(new PrintDocumentSubscriber());

Las aplicaciones pueden abrir un único flujo de cambios para supervisar todas las colecciones no del sistema de todas las bases de datos en una implementación de MongoDB. Para crear ese flujo de cambios, utiliza uno de los métodos MongoClient.watch().

En el siguiente ejemplo, el flujo de cambios imprime todos los cambios que observa en la implementación a la que está conectado MongoClient:

client.watch().subscribe(new PrintDocumentSubscriber());

Puede pasar una lista de etapas de agregación al método watch() para modificar los datos devueltos por el operador $changeStream.

Nota

No se admiten todos los operadores de agregación.Consulte "Flujos de cambios" en el manual del servidor para obtener más información.

En el siguiente ejemplo, el flujo de cambios imprime todos los cambios que observa correspondientes a las operaciones insert, update, replace y delete.

Primero, la canalización incluye una etapa $match para filtrar documentos donde operationType es insert, update, replace o delete. Luego, establece fullDocument en FullDocument.UPDATE_LOOKUP para que el documento posterior a la actualización se incluya en los resultados:

collection.watch(
asList(
Aggregates.match(
Filters.in("operationType", asList("insert", "update", "replace", "delete"))
)
)
).fullDocument(FullDocument.UPDATE_LOOKUP).subscribe(new PrintDocumentSubscriber());

Volver

Marco de agregación

En esta página