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.
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Menu Docs

Monitorar alterações de dados

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

Ao utilizar o driver C++ , você pode instanciar um mongocxx::change_stream para monitorar alterações de dados.

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 C++ , instancie um mongocxx::client que se conecte a um Atlas cluster e atribua os seguintes valores às suas variáveis db e collection :

auto db = client["sample_restaurants"];
auto collection = db["restaurants"];

Para aprender a criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o Guia de Introdução do MongoDB.

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 escuta. Você pode chamar o método watch() nas seguintes classes:

  • mongocxx::client: Monitorar todas as alterações na implantação do MongoDB

  • mongocxx::database: Monitorar alterações em todas as collections no banco de banco de dados

  • mongocxx::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:

auto stream = collection.watch();
while (true) {
for (const auto& event : stream) {
std::cout << bsoncxx::to_json(event) << std::endl;
}
}

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

auto result = collection.update_one(make_document(kvp("name", "Blarney Castle")),
make_document(kvp("$set",
make_document(kvp("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" : [ ] } }

Você pode passar uma instância mongocxx::pipeline como argumento para o método watch() para modificar a saída do fluxo de alteração. A lista a seguir inclui alguns dos campos mongocxx::pipeline que você pode definir chamando seus métodos de configuração correspondentes:

  • add_fields: adiciona novos campos aos documentos

  • match: filtra os documentos

  • project: projeta um subconjunto dos campos do documento

  • redact: restringe o conteúdo dos documentos

  • group: Agrupa documentos por uma expressão especificada

  • merge: gera os resultados para uma coleção

Dica

Para obter uma lista completa dos campos mongocxx::pipeline, consulte a documentação da API mongocxx::pipeline.

O exemplo a seguir define o campo match de uma instância mongocxx::pipeline e, em seguida, passa o pipeline para o método watch() . Isso instrui o método watch() a gerar somente operações de atualização:

mongocxx::pipeline pipeline;
pipeline.match(make_document(kvp("operationType", "update")));
auto stream = collection.watch(pipeline);
while (true) {
for (const auto& event : stream) {
std::cout << bsoncxx::to_json(event) << std::endl;
}
}

Você pode modificar o comportamento do método watch() passando uma instância da classe mongocxx::options::change_stream como parâmetro. A tabela seguinte descreve os campos que você pode definir em uma instância do mongocxx::options::find :

Campo
Descrição

full_document

Especifica se o documento completo deve ser mostrado após a 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.

full_document_before_change

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.

resume_after

Instrui watch() para retomar as alterações de retorno após a operação especificada no token de retomada.
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.
resume_after é mutuamente exclusivo com start_after e.start_at_operation_time

start_after

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.
start_after é mutuamente exclusivo com resume_after start_at_operation_timee.

start_at_operation_time

Instrui watch() a retornar apenas eventos que ocorram após o registro de data/hora especificado.
start_at_operation_time é mutuamente exclusivo com resume_after start_aftere.

max_await_time_ms

Define a quantidade máxima de tempo, em milissegundos, o servidor aguarda novas alterações de dados para relatar ao cursor do fluxo de alterações antes de retornar um lote vazio. Padrão para 1000 milissegundos.

batch_size

Define o número máximo de eventos de alteração a serem retornados em cada lote da resposta do cluster MongoDB .

collation

Define o agrupamento a ser usado para o cursor do change stream.

comment

Anexa um comentário à operação.

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 os campos full_document_before_change ou full_document de uma instância do mongocxx::options::change_stream .

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 o campo full_document_before_change para uma das seguintes strings:

  • "whenAvailable": o evento de alteração inclui uma pré-imagem do documento modificado para eventos de alteração somente se a pré-imagem estiver disponível.

  • "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 driver 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 no evento de fluxo de alteração, defina o campo full_document para uma das seguintes strings:

  • "updateLookup": o evento de alteração inclui uma cópia de todo o documento alterado de algum tempo após a alteração.

  • "whenAvailable": O evento de alteração inclui uma pós-imagem do documento modificado para eventos de alteração somente se a pós-imagem estiver disponível.

  • "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 driver 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 o campo full_document de uma instância mongocxx::options::change_stream :

mongocxx::options::change_stream opts;
opts.full_document("updateLookup");
auto stream = collection.watch(opts);
while (true) {
for (const auto& event : stream) {
std::cout << bsoncxx::to_json(event) << std::endl;
}
}

Com o aplicação change stream em execução, atualizar um documento na collection restaurants usando o exemplo de atualização anterior imprime um evento de alteração semelhante ao código a seguir:

{ "_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 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: