update
Evento
Resumo
update
Um evento
update
ocorre quando uma operação atualiza um documento em uma coleção.Observação
Desambiguação
Para saber mais sobre eventos que ocorrem quando as opções de coleta são modificadas, consulte o evento
modify
.
Descrição
Campo | Tipo | Descrição | |||
---|---|---|---|---|---|
_id | Documento | Um objeto BSON que serve como um identificador para o evento de fluxo de alterações. Este valor é utilizado como
O tipo de Para obter um exemplo de como retomar um fluxo de alterações por | |||
clusterTime | Timestamp | O carimbo de data/hora da entrada de registro opcional associada ao evento. Todas as notificações de eventos do fluxo de alterações associadas a uma transação com vários documentos têm o mesmo valor Em clusters fragmentados, eventos com o mesmo Para identificar eventos para uma única transação, você pode usar a combinação de | |||
collectionUUID | UUID | UUID identificando a coleção onde ocorreu a alteração. Novidades na versão 6.0. | |||
documentKey | documento | Documento que contém o valor Para coleções fragmentadas, este campo também exibe a chave de fragmentação completa do documento. O campo | |||
fullDocument | documento | O documento criado ou modificado por uma operação CRUD. Este campo aparece somente se você configurou o fluxo de alteração com Para mais informações, consulte Pesquisar documento completo para atualizar operações. Alterado na versão 6.0. A partir do MongoDB 6.0, se você definir a opção | |||
fullDocumentBeforeChange | documento | O documento antes das alterações serem aplicadas pela operação. Ou seja, a pré-imagem do documento. Este campo está disponível quando você habilita o campo Novidades na versão 6.0. | |||
lsid | documento | O identificador da sessão associada à transação. Somente presente se a operação fizer parte de uma transação de vários documentos. | |||
ns | documento | O namespace (banco de dados e/ou coleção) afetado pelo evento. | |||
ns.coll | string | O nome da coleção onde o evento ocorreu. | |||
ns.db | string | O nome do banco de dados onde ocorreu o evento. | |||
operationType | string | O tipo de operação que os relatórios de notificação de alteração. Retorna um valor de | |||
updateDescription | documento | Um documento que descreve os campos que foram atualizados ou removidos pela operação de atualização. | |||
updateDescription. disambiguatedPaths | documento | Um documento que fornece esclarecimento dos descritores de campo ambíguos em Quando o evento de alteração Exige que você configure a opção showExpandedEvents para Novidades na versão 6.1. | |||
updateDescription. removedFields | array | Uma array de campos que foram removidos pela operação de atualização. | |||
updateDescription. truncatedArrays | array | Uma array de documentos que registram truncamentos de array executados com atualizações baseadas em pipelin usando uma ou mais das seguintes etapas: Se toda a array for substituída, as truncações serão reportadas em updateDescription.updatedFields. | |||
updateDescription. truncatedArrays. field | string | O nome do campo truncado. | |||
updateDescription. truncatedArrays. newSize | inteiro | O número de elementos na array truncada. | |||
updateDescription. updatedFields | documento | Um documento cujas chaves correspondem aos campos que foram modificados pela operação de atualização. O valor de cada campo corresponde ao novo valor desses campos, em vez da operação que resultou no novo valor. | |||
txnNumber | Número longo | Juntamente com o lsid, um número que ajuda a identificar exclusivamente uma transação. Somente presente se a operação fizer parte de uma transação de vários documentos. | |||
wallTime | A data e hora do servidor da operação do banco de dados. Novidades na versão 6.0. |
Comportamento
Documentar pré e pós-imagens
A partir do MongoDB 6.0, você verá um documento fullDocumentBeforeChange
com os campos antes de o documento ser alterado (ou excluído) se executar estas etapas:
Ative o novo campo
changeStreamPreAndPostImages
para uma coleção utilizandodb.createCollection()
,create
oucollMod
.Configure
fullDocumentBeforeChange
para"required"
ou"whenAvailable"
emdb.collection.watch()
.
Exemplo de documento fullDocumentBeforeChange
na saída do fluxo de mudança:
"fullDocumentBeforeChange" : { "_id" : ObjectId("599af247bb69cd89961c986d"), "userName" : "alice123", "name" : "Alice Smith" }
Para obter exemplos completos com a saída do fluxo de alterações, consulte Fluxos de alterações com imagens pré e pós-documento.
As imagens pré e pós não estarão disponíveis para um change stream se as imagens forem:
Não habilitadas na coleção no momento de uma operação de atualização ou exclusão de documento.
Removido após o tempo de retenção pré e pós-imagem definido em
expireAfterSeconds
.O exemplo a seguir define
expireAfterSeconds
para100
segundos em um cluster inteiro:use admin db.runCommand( { setClusterParameter: { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } } } ) O exemplo a seguir retorna as configurações atuais do
changeStreamOptions
, incluindoexpireAfterSeconds
:db.adminCommand( { getClusterParameter: "changeStreamOptions" } ) Se um change stream for removido do oplog, as imagens pré e pós correspondentes também serão excluídas, independentemente do tempo de retenção pré e pós-imagem
expireAfterSeconds
.
Considerações adicionais:
Habilitar pré e pós-imagens consome espaço de armazenamento e adiciona tempo de processamento. Ative as imagens anteriores e posteriores somente se precisar delas.
Limite o tamanho do evento de transmissão da alteração para menos de 16 megabytes. Para limitar o tamanho do evento, você pode:
Limite o tamanho do documento a 8 megabytes. Você pode solicitar imagens pré e pós simultaneamente na saída do change stream se outros campos de evento de change stream, como
updateDescription
não forem grandes.Solicite apenas pós-imagens na saída de fluxo de alteração para documentos de até 16 megabytes se outros campos de evento de fluxo de alteração como
updateDescription
não forem grandes.Solicite somente pré-imagens na saída do change stream para documentos de até 16 megabytes se:
as atualizações do documento afetam apenas uma pequena fração da estrutura ou conteúdo do documento, e
não causa um evento de alteração
replace
. Um eventoreplace
sempre inclui o pós-imagem.
Para solicitar uma pré-imagem, defina
fullDocumentBeforeChange
comorequired
ouwhenAvailable
emdb.collection.watch()
. Para solicitar uma pós-imagem, definafullDocument
usando o mesmo método.As pré-imagens são escritas na coleção
config.system.preimages
.A coleção
config.system.preimages
pode ficar grande. Para limitar o tamanho da coleção, você pode definirexpireAfterSeconds
tempo para as pré-imagens, conforme mostrado anteriormente.As pré-imagens são removidas de forma assíncrona por um processo de plano de fundo.
Importante
Funcionalidade incompatível com versões anteriores
A partir do MongoDB 6.0, se você estiver usando imagens anteriores e posteriores de documentos para change streams, deverá desabilitar changeStreamPreandPostImages para cada coleção usando o collMod
comando antes de poder fazer o downgrade para uma versão anterior do MongoDB.
Dica
Veja também:
Para alterar eventos de transmissão e saída, consulte Alterar eventos.
Para observar alterações em uma collection, consulte
db.collection.watch()
.Para obter exemplos completos com a saída do fluxo de alterações, consulte Fluxos de alterações com imagens pré e pós-documento.
Desambiguação de Caminho
Novidades na versão 6.1.
O campo updateDescription
observa alterações feitas em campos específicos em documentos por uma operação. Estes descritores de campo utilizam pontos (.
) como separadores de caminho e números como índices de array, o que leva a alguma ambiguidade quando contém nomes de campo que utilizam pontos ou números.
Quando um evento do update
relata alterações envolvendo campos ambíguos, o documento do disambiguatedPaths
fornece a chave de caminho com uma array listando cada componente de caminho.
Observação
O campo disambiguatedPaths
só está disponível em fluxos de alteração iniciados com a opção showExpandedEvents
Por exemplo, considere um documento que relacione as pessoas e as cidades em que vivem:
{ "name": "Anthony Trollope", "home.town": "Oxford", "residences": [ {"0": "Oxford"}, {"1": "Sunbury"} ] }
Quando uma atualização modifica o campo
home.town
deOxford
paraLondon
, ela produz uma descrição de atualização que se parece com isto:"updateDescription": { "updatedFields": { "home.town": "London" }, "disambiguatedPaths": { "home.town": [ "home.town" ] } } Como o campo
home.town
contém um período, o campodisambiguatedPaths
mostra uma array com um valor, para indicar quetown
não é um subcampo dehome
.Quando uma atualização modifica um valor na array
residences
para fazer a mesma alteração, ela produz uma descrição de atualização que se parece com isto:"updateDescription": { "updatedFields": { "residences.0.0": "London" }, "disambiguatedPaths": { "residences.0.0": [ "residences", 0, "0" ] } } Os caminhos desambiguados incluem um número inteiro
0
para indicar o índice de array e a string"0"
para indicar o nome do campo dentro do documento aninhado.
Há dois casos em que o disambiguatedPath
não inclui um campo numérico:
Quando o primeiro campo no caminho é uma sequência numérica (ou seja,
0.name
). Isto não é ambíguo, pois o primeiro campo não pode ser um índice de array.Quando o campo de string numérica tiver zeros iniciais (ou seja,
0001
). Isso não é ambíguo, pois um número inteiro não pode ter zeros à esquerda.
Exemplo
O exemplo seguinte ilustra um evento update
:
{ "_id": { <Resume Token> }, "operationType": "update", "clusterTime": <Timestamp>, "wallTime": <ISODate>, "ns": { "db": "engineering", "coll": "users" }, "documentKey": { "_id": ObjectId("58a4eb4a30c75625e00d2820") }, "updateDescription": { "updatedFields": { "email": "alice@10gen.com" }, "removedFields": ["phoneNumber"], "truncatedArrays": [ { "field" : "vacation_time", "newSize" : 36 } ] } }
O exemplo seguinte ilustra um evento update
para alterar fluxos abertos com a opção fullDocument : updateLookup
:
{ "_id": { <Resume Token> }, "operationType": "update", "clusterTime": <Timestamp>, "wallTime": <ISODate>, "ns": { "db": "engineering", "coll": "users" }, "documentKey": { "_id": ObjectId("58a4eb4a30c75625e00d2820") }, "updateDescription": { "updatedFields": { "email": "alice@10gen.com" }, "removedFields": ["phoneNumber"], "truncatedArrays": [ { "field" : "vacation_time", "newSize" : 36 } ], "disambiguatedPaths": { } }, "fullDocument": { "_id": ObjectId("58a4eb4a30c75625e00d2820"), "name": "Alice", "userName": "alice123", "email": "alice@10gen.com", "team": "replication" } }
O documento fullDocument
representa a versão mais atual acordada majoritariamente do documento atualizado. O documento fullDocument
pode variar do documento no momento da operação de atualização, dependendo do número de operações de intercalação confirmadas que ocorrem entre a operação de atualização e a pesquisa do documento.