Definición
$changeStreamDevuelve un Cambiar el cursor de flujo en una colección, una base de datos o un clúster completo. Debe usarse como primera etapa de una canalización 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 del clúster. Solo se puede abrir en la base de datos
admin.fullDocumentOpcional: especifica si las notificaciones de cambio incluyen una copia del documento completo cuando se modifican mediante operaciones
update.default:Las notificaciones de cambio no incluyen el documento completo para las operacionesupdate.updateLookupLas notificaciones de cambio incluyen una copia del documento modificado por el cambio. Este documento es el documento mayoritariamente confirmado 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 como punto de inicio 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 una hora como punto de inicio lógico para el flujo de cambios. No se puede usar 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 cambio utilizando la etapa de agregación, ejecute el aggregate comando.
var cur = db.names.aggregate( [ { $changeStream: {} } ] )
Para abrir el cursor, ejecute 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 flujo de cambios, consulte Eventos de cambio.