Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

MongoDB\Client::watch()

Nuevo en la versi贸n 1.4.

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
$pipeline : arreglo|objeto
El pipeline de etapas que se va a a帽adir a una etapa inicial $changeStream.
$options : arreglo

Un arreglo que especifica las opciones deseadas.

Nombre
Tipo
Descripci贸n

batchSize

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 comando aggregate tiene un tama帽o de lote inicial de 101 documentos 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 configuras batchSize en 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 comando aggregate para 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 locale es 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 fullDocument para 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 y fullDocument se omite. Las operaciones de inserci贸n y reemplazo siempre incluyen el campo fullDocument. 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. Especifique whenAvailable para 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_LOOKUP

  • MongoDB\Operation\Watch::FULL_DOCUMENT_WHEN_AVAILABLE

  • MongoDB\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 changeStreamPreAndPostImages habilitado. 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_AVAILABLE

  • MongoDB\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 _id en los documentos devueltos por el flujo de cambios puede usarse aqu铆.

Utilizar esta opci贸n en conjunto con startAfter y/o startAtOperationTime provocar谩 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:

  • createIndexes

  • dropIndexes

  • modify

  • create

  • shardCollection

  • reshardCollection (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 _id en los documentos devueltos por el flujo de cambios puede usarse aqu铆. A diferencia de resumeAfter, esta opci贸n puede utilizarse con un token de reanudaci贸n de un evento de "invalidaci贸n".

Utilizar esta opci贸n en conjunto con resumeAfter y/o startAtOperationTime provocar谩 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 operationTime devuelto por el comando inicial aggregate, si est谩 disponible.

Utilizar esta opci贸n en conjunto con resumeAfter y/o startAfter provocar谩 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.

Un objeto MongoDB\ChangeStream, que permite la iteraci贸n de eventos en el flujo de cambios a trav茅s de la interfaz Iterator.

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).

Este ejemplo informa sobre eventos mientras recorre un flujo de cambios.

<?php
$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"}

Volver

startSession()

En esta p谩gina