Definición
$changeStreamDevuelve un(a) Change Stream cursor en una colección, una base de datos o en todo un clúster. Debe usarse como la primera etapa en un pipeline de agregación.
La etapa
$changeStreamtiene la siguiente sintaxis:{ $changeStream: { allChangesForCluster: <boolean>, fullDocument: <string>, resumeAfter: <document> startAfter: <document> startAtOperationTime: <timestamp> } } ParameterDescripciónallChangesForClusterOpcional: establece si el flujo de cambios debe incluir todos los cambios en el clúster. Solo puede abrirse en la base de datos
admin.fullDocumentOpcional: especifica si las notificaciones de cambios incluyen una copia del documento completo cuando es modificado por operaciones
update.default: Las notificaciones de cambios no incluyen el documento completo para las operaciones deupdate.updateLookup: Las notificaciones de cambio incluyen una copia del documento modificado por el cambio. Este documento es el documento actual comprometido por mayoría onullsi ya no existe.
En el caso de actualizaciones parciales, la notificación de cambio también proporciona una descripción del cambio.
resumeAfteropcional. Especifica un token de reanudación (resume token) como el punto de partida lógico para el flujo de cambios. No se puede usar para reanudar el flujo de cambios después de un
invalidateevento.resumeAfteres mutuamente excluyente constartAfterystartAtOperationTime.startAfterOpcional. Especifica un token de reanudación como el punto de inicio lógico para el flujo de cambios. A diferencia de
resumeAfter,startAfterpuede reanudar las notificaciones después de un eventoinvalidatecreando un nuevo flujo de cambios.startAfteres mutuamente excluyente conresumeAfterystartAtOperationTime.startAtOperationTimeEspecifica un momento como punto de partida lógico para el flujo de cambios. No puede usarse con los campos
resumeAfterostartAfter.
Compatibilidad con Stable API
Los flujos de cambio están incluidos en la API estable1 V.
Ejemplos
Para crear un cursor de flujo de cambios usando la etapa de agregación, ejecuta el comando aggregate.
var cur = db.names.aggregate( [ { $changeStream: {} } ] )
Para abrir el cursor, ejecuta cur.
Cuando el flujo de cambios detecta un cambio, el método next() devuelve una notificación de evento de cambio. Por ejemplo, tras ejecutar cur.next(), MongoDB devuelve un documento similar al siguiente:
{ "_id": { _data: "8262E2EE54000000022B022C0100296E5A100448E5E3DD01364019AE8FE8C6859527E046645F6964006462E2EE54C8756C0D5CF6F0720004" }, "operationType": "insert", "clusterTime": Timestamp({ t: 1659039316, i: 2 }), "fullDocument": { "_id": ObjectId("62e2ee54c8756c0d5cf6f072"), "name": "Walker Percy" }, "ns": { "db": "test", "coll": "names" }, "documentKey": { _id: ObjectId("62e2ee54c8756c0d5cf6f072") } }
Para obtener más información sobre las notificaciones de flujos de cambios, consulta Eventos de cambio.