Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Monitore dados com change streams

Neste guia, você pode aprender como usar um fluxo de alterações para monitorar alterações em tempo real em seus dados. Um change stream é uma funcionalidade do MongoDB Server que permite que seu aplicação se inscreva em alterações de dados em uma collection, banco de dados de dados ou sistema.

Ao usar a biblioteca PHP do MongoDB , você pode chamar o método watch() para retornar uma instância de MongoDB\ChangeStream. Em seguida, você pode iterar por meio da instância MongoDB\ChangeStream para monitorar as alterações de dados, como atualizações, inserções e exclusões.

Dica

Atlas Stream Processing

Como uma alternativa para alterar fluxos, você pode utilizar o Atlas Stream Processing para processar e transformar fluxos de dados. Ao contrário dos change streams, que registram apenas eventos de banco de dados, o Atlas Stream Processing gerencia vários tipos de evento de dados e fornece funcionalidades estendidas de processamento de dados. Para saber mais sobre esse recurso, consulte Atlas Stream Processing na documentação do MongoDB Atlas.

Os exemplos neste guia usam a collection restaurants no banco de dados sample_restaurants dos conjuntos de banco de dados de amostra do Atlas. Para acessar essa coleção a partir do seu aplicação PHP , instancie um MongoDB\Client que se conecte a um Atlas cluster e atribua o seguinte valor à sua variável $collection :

$collection = $client->sample_restaurants->restaurants;

Dica

Para aprender como criar uma implantação gratuita do MongoDB e carregar os conjuntos de dados de amostra, consulte o Guia de introdução do MongoDB.

Alguns exemplos utilizam a função toJSON() para representar eventos de alteração, que são documentos BSON, como Extended JSON. Para usar essa função, cole o seguinte código no arquivo do seu aplicação :

function toJSON(object $document): string
{
return MongoDB\BSON\Document::fromPHP($document)->toRelaxedExtendedJSON();
}

Para abrir um fluxo de alteração, chame o método watch() . A instância na qual você chama o método watch() determina o escopo de eventos que o change stream monitora. Você pode chamar o método watch() em instâncias das seguintes classes:

  • MongoDB\Client: Monitorar todas as alterações na implantação do MongoDB

  • MongoDB\Database: Monitorar alterações em todas as collections no banco de banco de dados

  • MongoDB\Collection: Monitorar alterações na coleção

O exemplo a seguir abre um fluxo de alteração na collection restaurants e gera as alterações conforme elas ocorrem:

$changeStream = $collection->watch();
$changeStream->rewind();
while (true) {
$changeStream->next();
if ($changeStream->valid()) {
continue;
}
$event = $changeStream->current();
echo toJSON($event), PHP_EOL;
if ($changeStream->current()['operationType'] === 'invalidate') {
break;
}
}

Para começar a observar as alterações, execute o código anterior. Em seguida, em uma shell separada, modifique a coleção restaurants . O exemplo a seguir atualiza um documento que tem um valor de campo name de 'Blarney Castle':

$result = $collection->updateOne(
['name' => 'Blarney Castle'],
['$set' => ['cuisine' => 'Irish']],
);

Quando você atualiza a coleção, o aplicação de fluxo de alterações imprime a alteração conforme ela ocorre. O evento de alteração impresso se assemelha à seguinte saída:

{ "_id" : { "_data" : "..." }, "operationType" : "update", "clusterTime" :
{ "$timestamp" : { ... } }, "wallTime" : { "$date" : "..." }, "ns" : { "db" :
"sample_restaurants", "coll" : "restaurants" }, "documentKey" : { "_id" :
{ "$oid" : "..." } }, "updateDescription" : { "updatedFields" : { "cuisine" : "Irish" },
"removedFields" : [ ], "truncatedArrays" : [ ] } }

Para modificar a saída do change stream, passe os estágios de pipeline em uma array como parâmetro para o método watch() . Você pode incluir os seguintes estágios na array:

  • $addFields ou $set: adiciona novos campos aos documentos

  • $match: filtra os documentos

  • $project: projeta um subconjunto dos campos do documento

  • $replaceWith ou $replaceRoot: substitui o documento de entrada pelo documento especificado

  • $redact: restringe o conteúdo dos documentos

  • $unset: remove campos de documentos

O exemplo a seguir passa um pipeline que inclui o estágio $match para o método watch() . Isso instrui o método watch() a gerar eventos somente quando as operações de atualização ocorrerem:

$pipeline = [['$match' => ['operationType' => 'update']]];
$changeStream = $collection->watch($pipeline);
$changeStream->rewind();
while (true) {
$changeStream->next();
if ($changeStream->valid()) {
continue;
}
$event = $changeStream->current();
echo toJSON($event), PHP_EOL;
if ($changeStream->current()['operationType'] === 'invalidate') {
break;
}
}

Dica

Operações com construtores

Você pode usar um padrão de construtor para criar o pipeline do fluxo de alterações. Para saber mais, consulte o guia Operações com construtores.

Para modificar o comportamento do método watch() , você pode passar uma array de opções como parâmetro para watch(). A tabela a seguir descreve opções úteis que você pode definir na array:

Opção
Descrição

fullDocument

Especifica se deve mostrar o documento completo após a alteração, em vez de mostrar apenas as alterações feitas no documento. Para aprender mais sobre esta opção, consulte a seção Incluir pré-imagens e pós-imagens deste guia.

fullDocumentBeforeChange

Especifica se o documento completo deve ser mostrado como estava antes da alteração, em vez de mostrar apenas as alterações feitas no documento. Para saber mais sobre essa opção, consulte Incluir pré-imagens e pós-imagens.

startAfter

Instrui o watch() para iniciar um novo fluxo de alterações após a operação especificada no token de retomada. Este campo permite que as notificações sejam retomadas após um evento de invalidação .
Cada documento de evento de fluxo de alteração inclui um token de currículo como o _id campo. Passe todo o _id campo do documento do evento de alteração que representa a operação que você deseja retomar depois.
Esta opção é mutuamente exclusiva com resumeAfter e.startAtOperationTime

startAtOperationTime

Instrui o change stream a fornecer apenas alterações que ocorreram no momento ou após o registro de data e hora especificado.
Esta opção é mutuamente exclusiva com startAfter e.resumeAfter

collation

Define o agrupamento a ser usado para o cursor do fluxo de alterações. Para aprender mais, consulte a seção Agrupamentos desta página.

Para obter uma lista completa das opções watch() , consulte MongoDB\Collection::watch() na documentação da API.

Importante

Você pode habilitar pré-imagens e pós-imagens em collections somente se seu sistema usar MongoDB v6.0 ou posterior.

Por padrão, quando você executa uma operação em uma collection, o evento de alteração correspondente inclui somente o delta dos campos modificados por essa operação. Para ver o documento completo antes ou depois de uma alteração, especifique as opções fullDocumentBeforeChange ou fullDocument em um parâmetro de array para watch().

A pré-imagem é a versão completa de um documento antes de uma alteração. Para incluir a pré-imagem no evento de fluxo de alteração, defina a opção fullDocumentBeforeChange para um dos seguintes valores:

  • MongoDB\Operation\Watch::FULL_DOCUMENT_BEFORE_CHANGE_WHEN_AVAILABLE: o evento de alteração inclui uma pré-imagem do documento modificado para eventos de alteração. Se a pré-imagem não estiver disponível, esse campo de evento de alteração terá um valor null .

  • MongoDB\Operation\Watch::FULL_DOCUMENT_BEFORE_CHANGE_REQUIRED: o evento de alteração inclui uma pré-imagem do documento modificado para eventos de alteração. Se a pré-imagem não estiver disponível, o servidor gerará um erro.

A pós-imagem é a versão completa de um documento após uma alteração. Para incluir a pós-imagem na alteração de evento de fluxo, defina a opção fullDocument para um dos seguintes valores:

  • MongoDB\Operation\Watch::FULL_DOCUMENT_UPDATE_LOOKUP: o evento de alteração inclui uma cópia de todo o documento alterado de algum tempo após a alteração.

  • MongoDB\Operation\Watch::FULL_DOCUMENT_WHEN_AVAILABLE: o evento de alteração inclui uma pós-imagem do documento modificado para eventos de alteração. Se a pós-imagem não estiver disponível, esse campo de evento de alteração terá um valor null .

  • MongoDB\Operation\Watch::FULL_DOCUMENT_REQUIRED: o evento de alteração inclui uma pós-imagem do documento modificado para eventos de alteração. Se a pós-imagem não estiver disponível, o servidor gerará um erro.

O exemplo a seguir chama o método watch() em uma coleção e inclui a pós-imagem de documentos atualizados definindo a opção fullDocument :

$options = ['fullDocument' => MongoDB\Operation\Watch::FULL_DOCUMENT_UPDATE_LOOKUP];
$changeStream = $collection->watch([], $options);
$changeStream->rewind();
while (true) {
$changeStream->next();
if ($changeStream->valid()) {
continue;
}
$event = $changeStream->current();
echo toJSON($event), PHP_EOL;
if ($changeStream->current()['operationType'] === 'invalidate') {
break;
}
}

Com o aplicação de fluxo de alterações em execução em um shell separado, atualizar um documento na coleção restaurants usando o exemplo de atualização anterior imprime um evento de alteração semelhante à seguinte saída:

{ "_id" : { "_data" : "..." }, "operationType" : "update", "clusterTime" :
{ "$timestamp" : { ... } }, "wallTime" : { "$date" : "..." },
"fullDocument" : { "_id" : { "$oid" : "..." }, "address" : { "building" :
"202-24", "coord" : [ -73.925044200000002093, 40.559546199999999772 ], "street"
: "Rockaway Point Boulevard", "zipcode" : "11697" }, "borough" : "Queens",
"cuisine" : "Irish", "grades" : [ ...], "name" : "Blarney Castle", "restaurant_id" :
"40366356" }, "ns" : { "db" : "sample_restaurants", "coll" : "restaurants" },
"documentKey" : { "_id" : { "$oid" : "..." } }, "updateDescription" :
{ "updatedFields" : { "cuisine" : "Irish" }, "removedFields" : [ ],
"truncatedArrays" : [ ] } }

Dica

Para saber mais sobre pré e pós-imagens, consulte Change Streams com pré e pós-imagens de documentos no manual do MongoDB Server .

Para especificar um agrupamento para sua operação, passe um parâmetro de array $options que defina a opção collation para o método de operação. Atribua a opção collation a uma array que configure as regras de agrupamento.

A tabela a seguir descreve os campos que você pode definir para configurar o agrupamento:

Campo
Descrição

locale

(Obrigatório) Especifica a locale { components internacionais para Unicode} (ICU). Para obter uma lista de localidades suportadas, consulte Localidades de Agrupamento e Parâmetros Padrão no manual do MongoDB Server .

Tipo de dados: string

caseLevel

(Opcional) Especifica se incluir comparação de caso.

Quando definido true como, o comportamento de comparação depende do valor do strength campo :

- Se strength 1for, a biblioteca PHP compara
caracteres básicos e maiúsculas e minúsculas.

- strength Se 2 for, a biblioteca PHP compara
caracteres básicos, diacríticos, outras diferenças secundárias e maiúsculas e minúsculas.

- Se strength for qualquer outro valor, este campo será ignorado.

Quando definida false como, a biblioteca PHP não inclui a comparação de caso no nível 1 de força 2 ou.

Tipo de Dados: bool
Padrão: false

caseFirst

(Opcional) Especifica a ordem de classificação das diferenças de caso durante as comparações de nível terciário.

Tipo de dados: string
Padrão: "off"

strength

(Opcional) Especifica o nível de comparação a ser executado, conforme definido na documentação da ICU.

Tipo de dados: int
Padrão: 3

numericOrdering

(Opcional) Especifica se o driver compara strings numéricas como números.

Se definido como true, a biblioteca PHP compara strings numéricas como números. Por exemplo, ao comparar as strings "10" e "2", a biblioteca usa os valores numéricos das strings e trata "10" como maior que "2".

Se definido como false, a biblioteca PHP compara strings numéricas como strings. Por exemplo, ao comparar as strings "10" e "2", a biblioteca compara um caractere por vez e trata "10" como menor que "2".

Para obter mais informações, consulte Restrições de agrupamentos no manual do MongoDB Server.

Tipo de dados: bool
Padrão: false

alternate

(Opcional) Especifica se a biblioteca considera espaços em branco e pontuação como caracteres base para fins de comparação.

Tipo de dados: string
Padrão: "non-ignorable"

maxVariable

(Opcional) Especifica quais caracteres a biblioteca considera ignoráveis quando o alternate campo é definido "shifted" como.

Tipo de dados: string
Padrão: "punct"

backwards

(Opcional) Especifica se as strings contendo diacríticos são classificadas da parte de trás da string para a frente.

Tipo de dados: bool
Padrão: false

Para saber mais sobre agrupamento e os possíveis valores para cada campo, consulte a entrada de Agrupamento no manual do MongoDB Server.

Para saber mais sobre fluxos de alterações, consulte Change Streams de alterações no manual do MongoDB Server .

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: