Change streams

Sigue los cambios de una colección, una base o todo el clúster, en orden de commit.

Los change streams de MongoDB funcionan sobre una colección, una base de datos o todo el clúster. Los eventos salen en orden de commit, con las transacciones juntas, sin pérdidas ni duplicados aunque los rangos se dividan, se fusionen o cambien de líder.

JavaScript
const stream = db.pedidos.watch([{ $match: { operationType: { $in: ["insert", "update"] } } }]);
for await (const cambio of stream) {
  console.log(cambio.operationType, cambio.documentKey);
}

Reanudar

Cada evento lleva un token de reanudación. Si tu aplicación se cae, vuelve a abrir el stream con resumeAfter o startAfter y sigue donde lo dejó. Puedes reanudar mientras el cambio siga en el historial que conserva el clúster: 24 horas por defecto, que cambias con el parámetro teselaHistoryRetention.

JavaScript
db.adminCommand({ setClusterParameter: { teselaHistoryRetention: { seconds: 172800 } } });

Pre-imágenes y post-imágenes

Activa changeStreamPreAndPostImages en la colección y pide fullDocumentBeforeChange o fullDocument: "updateLookup" como en MongoDB. changeStreamOptions.preAndPostImages.expireAfterSeconds limita cuánto tiempo se guardan.

Eventos de DDL y grandes

Los eventos de creación, borrado y cambio de colecciones e índices salen con showExpandedEvents, y un evento que supera 16 MiB se parte con $changeStreamSplitLargeEvent.