replace
Evento
Resumo
replace
Um evento
replace
ocorre quando uma operação de atualização remove um documento de uma coleta e o substitui por um novo documento, como quando o métodoreplaceOne
é chamado.
Descrição
Campo | Tipo | Descrição | |||
---|---|---|---|---|---|
| Documento | Um objeto BSON que serve como um identificador para o evento de fluxo de alterações. Este valor é utilizado como
O Para obter um exemplo de como retomar um fluxo de alterações por | |||
| Timestamp |
Devido aos limites de tamanho do oplog , transações com vários documentos podem criar várias entradas no oplog. Em uma transação, os eventos de change stream encenados em uma determinada entrada do oplog compartilham o mesmo Em clusters fragmentados, eventos com o mesmo Para identificar eventos para uma única transação, você pode usar a combinação de | |||
| UUID | UUID identificando a coleção onde ocorreu a alteração. Novidades na versão 6.0. | |||
| 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 | |||
| documento | O novo documento criado pela operação. Alterado na versão 6.0. A partir do MongoDB 6.0, se você definir a opção | |||
| 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. | |||
| 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. | |||
| documento | O namespace (banco de dados e/ou coleção) afetado pelo evento. | |||
| string | O nome da coleção onde o evento ocorreu. | |||
| string | O nome do banco de dados onde ocorreu o evento. | |||
| string | O tipo de operação que os relatórios de notificação de alteração. Retorna um valor de | |||
| 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. | |||
| 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.
Exemplos
O exemplo seguinte ilustra um evento replace
:
{ "_id": { <Resume Token> }, "operationType": "replace", "clusterTime": <Timestamp>, "wallTime": <ISODate>, "ns": { "db": "engineering", "coll": "users" }, "documentKey": { "_id": ObjectId("599af247bb69cd89961c986d") }, "fullDocument": { "_id": ObjectId("599af247bb69cd89961c986d"), "userName": "alice123", "name": "Alice" } }
Uma operação replace
utiliza o comando de atualização e consiste em dois estágios:
Exclua o documento original com o
documentKey
eInsira o novo documento usando o mesmo
documentKey
O fullDocument
de um evento replace
representa o documento após a inserção do documento de substituição.