Nuevo en la versi贸n 1.4.
Definici贸n
MongoDB\Client::watch()Ejecuta un(a) flujo de cambios operaci贸n en el cliente. El flujo de cambios puede ser visto para cambios a nivel de cl煤ster.
function watch( array $pipeline = [], array $options = [] ): MongoDB\ChangeStream
Par谩metros
$pipeline: arreglo|objeto- El pipeline de etapas que se va a a帽adir a una etapa inicial
$changeStream. $options: arregloUn arreglo que especifica las opciones deseadas.
NombreTipoDescripci贸nbatchSize
entero
El n煤mero m谩ximo de documentos dentro de cada lote devuelto en un flujo de cambios, que se aplica al comando
aggregate. Por defecto, el comandoaggregatetiene un tama帽o de lote inicial de101documentos y un tama帽o m谩ximo de 16 mebibytes (MiB) para cada lote posterior. Esta opci贸n puede aplicar un l铆mite menor que 16 MiB, pero no uno mayor. Si configurasbatchSizeen un l铆mite que origine lotes m谩s grandes que 16 MiB, esta opci贸n no tendr谩 efecto.Independientemente de la opci贸n
batchSize, la respuesta inicial del comandoaggregatepara un flujo de cambios no suele incluir ning煤n documento a menos que se utilice otra opci贸n para configurar su punto de inicio (por ejemplo,startAfter).c贸dec
MongoDB\Codec\DocumentCodec
La Codifica datos con c贸decs de tipo para usar en la codificaci贸n o decodificaci贸n de documentos. Esta opci贸n es mutuamente excluyente con la opci贸n
typeMap.Novedad en la versi贸n 1.17.
intercalaci贸n
arreglo|objeto
Intercalaci贸n permite a los usuarios especificar reglas espec铆ficas del lenguaje para la comparaci贸n de cadenas, tales como reglas para may煤sculas y tildes. Al especificar la intercalaci贸n, el campo
localees obligatorio; todos los dem谩s campos de intercalaci贸n son opcionales. Para obtener descripciones de los campos, consulte Documento de intercalaci贸n.comment
mixto
Permite a los usuarios especificar un comentario arbitrario para ayudar a rastrear la operaci贸n a trav茅s del perfilador de bases de datos, la salida actualOp() y registros.
El comentario puede ser cualquier tipo v谩lido de BSON a partir de MongoDB 4.4. Las versiones anteriores del servidor solo admiten valores de string.
Novedades en la versi贸n 1.13.
fullDocument
string
Determina c贸mo se llenar谩 el campo de respuesta
fullDocumentpara las operaciones de actualizaci贸n.Por defecto, los flujos de cambio solo devuelven el delta de los campos (a trav茅s de un campo
updateDescription) para las operaciones de actualizaci贸n yfullDocumentse omite. Las operaciones de inserci贸n y reemplazo siempre incluyen el campofullDocument. Las operaciones de borrar omiten el campo, ya que el documento ya no existe.Especifica "updateLookup" (b煤squeda de actualizaci贸n) para devolver la versi贸n actual confirmada por mayor铆a del documento actualizado.
A partir de MongoDB 6.0, puedes acceder a la post-imagen del documento modificado si la colecci贸n tiene activada la
changeStreamPreAndPostImages. EspecifiquewhenAvailablepara devolver la imagen de publicaci贸n si est谩 disponible o un valor nulo si no lo est谩. Especifique "required" para devolver la imagen de publicaci贸n si est谩 disponible o generar un error si no lo est谩.Se admiten los siguientes valores:
MongoDB\Operation\Watch::FULL_DOCUMENT_UPDATE_LOOKUPMongoDB\Operation\Watch::FULL_DOCUMENT_WHEN_AVAILABLEMongoDB\Operation\Watch::FULL_DOCUMENT_REQUIRED
Esta es una opci贸n de la etapa de pipeline
$changeStream.fullDocumentBeforeChange
string
Determina c贸mo se completar谩 el campo de respuesta
fullDocumentBeforeChange. Por defecto, el campo se omite.MongoDB 6.0+ permite devolver la pre-imagen del documento modificado si la colecci贸n tiene
changeStreamPreAndPostImageshabilitado. Especifica "whenAvailable" para devolver la preimagen si est谩 disponible o un valor nulo si no lo est谩. Especifica "requerido" para devolver la preimagen si est谩 disponible o generar un error en caso contrario.Se admiten los siguientes valores:
MongoDB\Operation\Watch::FULL_DOCUMENT_BEFORE_CHANGE_WHEN_AVAILABLEMongoDB\Operation\Watch::FULL_DOCUMENT_BEFORE_CHANGE_REQUIRED
Esta es una opci贸n de la etapa de pipeline
$changeStream.Novedades en la versi贸n 1.13.
maxAwaitTimeMS
entero
Entero positivo que indica el l铆mite de tiempo en milisegundos para que el servidor bloquee una operaci贸n getMore si no hay datos disponibles.
readConcern
Nivel de consistencia de lectura para usar en la operaci贸n. Se establecer谩 por defecto seg煤n el nivel de consistencia de lectura del cliente.
readPreference
Preferencia de lectura para utilizar en la operaci贸n. Se establece por defecto seg煤n la preferencia de lectura del cliente.
Esto se utiliza tanto para la agregaci贸n inicial de flujos de cambio como para la selecci贸n del servidor durante una reanudaci贸n autom谩tica.
Reanudar despu茅s
arreglo|objeto
Especifica el punto de partida l贸gico para el nuevo flujo de cambios. El campo
_iden los documentos devueltos por el flujo de cambios puede usarse aqu铆.Utilizar esta opci贸n en conjunto con
startAftery/ostartAtOperationTimeprovocar谩 un error del servidor. Las opciones son mutuamente excluyentes.Esta es una opci贸n de la etapa de pipeline
$changeStream.sesi贸n
Sesi贸n de cliente para asociar con la operaci贸n.
mostrarEventosExpandido
booleano
Si es verdadero, indica al servidor que incluya eventos DDL adicionales en el flujo de cambios. Se pueden incluir los siguientes eventos adicionales:
createIndexesdropIndexesmodifycreateshardCollectionreshardCollection(servidor 6.1+)refineCollectionShardKey(servidor 6.1+)
Esto no se admite en versiones anteriores del servidor a la 6.0 y, si se utiliza, provocar谩 una excepci贸n en el momento de la ejecuci贸n.
Esta es una opci贸n de la etapa de pipeline
$changeStream.Novedades en la versi贸n 1.13.
startAfter
arreglo|objeto
Especifica el punto de inicio l贸gico para el nuevo flujo de cambios. El campo
_iden los documentos devueltos por el flujo de cambios puede usarse aqu铆. A diferencia deresumeAfter, esta opci贸n puede utilizarse con un token de reanudaci贸n de un evento de "invalidaci贸n".Utilizar esta opci贸n en conjunto con
resumeAftery/ostartAtOperationTimeprovocar谩 un error del servidor. Las opciones son mutuamente excluyentes.Esta es una opci贸n de la etapa de pipeline
$changeStream.Nueva en la versi贸n 1.5.
startAtOperationTime
Si se especifica, el flujo de cambios solo proporcionar谩 los cambios que ocurrieron en o despu茅s de la marca de tiempo especificada. Por defecto, se utilizar谩 el
operationTimedevuelto por el comando inicialaggregate, si est谩 disponible.Utilizar esta opci贸n en conjunto con
resumeAftery/ostartAfterprovocar谩 un error del servidor. Las opciones son mutuamente excluyentes.Para utilizar esta opci贸n, debes conectarte a MongoDB 6.0 o posterior. Si est谩 conectado a una versi贸n anterior, el servidor devuelve una excepci贸n al momento de la ejecuci贸n.
Esta es una opci贸n de la etapa de pipeline
$changeStream.typeMap
arreglo
El mapa de tipos que se debe aplicar a los cursores, lo que determina c贸mo se convierten los documentos BSON en valores PHP. Por defecto para el mapa de tipos del cliente.
Return Values
Un objeto MongoDB\ChangeStream, que permite la iteraci贸n de eventos en el flujo de cambios a trav茅s de la interfaz Iterator.
Errores/Excepciones
MongoDB\Exception\UnexpectedValueException si la respuesta del comando del servidor era incorrecta.
MongoDB\Exception\UnsupportedException si se usan opciones que no sean compatibles con el servidor seleccionado (p. ej. collation, readConcern, writeConcern).
MongoDB\Exception\InvalidArgumentException por errores relacionados con el an谩lisis de par谩metros u opciones.
MongoDB\Driver\Exception\RuntimeException para otros errores a nivel de extensi贸n (por ejemplo, " errores de conexi贸n).
Ejemplos
Este ejemplo informa sobre eventos mientras recorre un flujo de cambios.
$uri = 'mongodb://rs1.example.com,rs2.example.com/?replicaSet=myReplicaSet'; $client = new MongoDB\Client($uri); $changeStream = $client->watch(); for ($changeStream->rewind(); true; $changeStream->next()) { if ( ! $changeStream->valid()) { continue; } $event = $changeStream->current(); if ($event['operationType'] === 'invalidate') { break; } $ns = sprintf('%s.%s', $event['ns']['db'], $event['ns']['coll']); $id = json_encode($event['documentKey']['_id']); switch ($event['operationType']) { case 'delete': printf("Deleted document in %s with _id: %s\n\n", $ns, $id); break; case 'insert': printf("Inserted new document in %s\n", $ns); echo json_encode($event['fullDocument']), "\n\n"; break; case 'replace': printf("Replaced new document in %s with _id: %s\n", $ns, $id); echo json_encode($event['fullDocument']), "\n\n"; break; case 'update': printf("Updated document in %s with _id: %s\n", $ns, $id); echo json_encode($event['updateDescription']), "\n\n"; break; } }
Suponiendo que se insertara, actualizara y eliminara un documento mientras el script anterior estuviese iterando el flujo de cambios, la salida se parecer铆a entonces a:
Inserted new document in app.user {"_id":{"$oid":"5b329b6674083047cc05e607"},"username":"bob"} Inserted new document in app.products {"_id":{"$oid":"5b329b6a74083047cc05e608"},"name":"Widget","quantity":5} Inserted new document in logs.messages {"_id":{"$oid":"5b329b7374083047cc05e609"},"msg":"bob purchased a widget"}
Ver tambi茅n
Pipelines de agregaci贸n documentaci贸n en el Manual de MongoDB
Change Streams documentaci贸n en el manual de MongoDB
Documentaci贸n sobre Change eventos en el manual de MongoDB