- Change Streams >
- Change Events
Change Events¶
On this page
Change Events¶
The following document represents all possible fields that a change stream response document can have.
Some fields are only available for certain operations, such as updates. The following table describes each field in the change stream response document:
Field | Type | Description |
---|---|---|
_id | document | A BSON object which serves as an identifier for the
change stream event. This value is used as the The See Resume a Change Stream for an example of resuming a
change stream by |
operationType |
string | The type of operation that occurred. Can be any of the following values:
|
fullDocument |
document | The document created or modified by the For For For Starting in MongoDB 6.0, if you enable the
|
fullDocumentBeforeChange |
document | The document before it was replaced, updated, or deleted (the document pre-image). To obtain New in version 6.0. |
ns |
document | The namespace (database and or collection) affected by the event. |
ns.db |
string | The name of the database. |
ns.coll |
string | The name of the collection. For |
to |
document | When operationType is rename , this document displays the new name for
the ns collection. This document is omitted for all other values
of operationType . |
to.db |
string | The new name of the database. |
to.coll |
string | The new name of the collection. |
documentKey |
document | A document that contains the _id of the document created or modified by the insert ,
replace , delete , update operations (i.e. CRUD operations).
For sharded collections, also displays the full shard key for the
document. The _id field is not repeated if it is already a
part of the shard key. |
updateDescription |
document | A document describing the fields that were updated or removed by the update operation. This document and its fields only appears if the |
updateDescription. updatedFields |
document | A document whose keys correspond to the fields that were modified by the update operation. The value of each field corresponds to the new value of those fields, rather than the operation that resulted in the new value. |
updateDescription. removedFields |
array | An array of fields that were removed by the update operation. |
updateDescription. truncatedArrays |
array | An array of documents which record array truncations performed with pipeline-based updates using one or more of the following stages: Note If the entire array is replaced, the truncations will be
reported under |
updateDescription. truncatedArrays. field |
string | The name of the truncated field. |
updateDescription. truncatedArrays. newSize |
integer | The number of elements in the truncated array. |
operationDescription |
document | A document describing the operation performed. This document and its fields only appears for certain New in version 6.0. |
operationDescription.dropTarget |
UUID | Provides the UUID of the collection that was dropped in the rename operation. This field only appears when the New in version 6.0. |
operationDescription.idIndex |
document | The primary key index for a new collection. This field only appears when the New in version 6.0. |
operationDescription.index |
document | Describes the index that was modified. This field only appears when the New in version 6.0. |
operationDescription.indexes |
array | An array of documents listing the indexes that were created or dropped by the operation. This field only appears when the New in version 6.0. |
operationDescription.numInitialChunks |
long | Numbers of chunks created on each shard during a This field only appears when the New in version 6.0. |
operationDescription.presplitHashedZones |
boolean | Indicates whether the shards are pre-split into zones. This field only appears when the New in version 6.0. |
operationDescription.shardKey |
document | Document showing the shard key for the collection. This field only appears when the New in version 6.0. |
operationDescription.to |
document | When New in version 6.0. |
operationDescription.to.db |
string | Indicates the new dataname name of the renamed collection. New in version 6.0. |
operationDescription.to.coll |
string | Indicates the new collection name of the renamed collection. New in version 6.0. |
operationDescription.unique |
boolean | Indicates whether shard chunks were pre-split according to zones when the collection became sharded. This field only appears when the New in version 6.0. |
wallTime |
ISODate | ISO date from the oplog entry associated with the event. New in version 6.0. |
collectionUUID |
UUID | UUID identifying the collection. New in version 6.0. |
clusterTime |
Timestamp | The timestamp from the oplog entry associated with the event. For events that happened as part of a multi-document
transaction, the associated change stream
notifications will have the same On a sharded cluster, events that occur on different shards can
have the same New in version 4.0. |
wallTime |
ISODate | The server date and time of the database operation. New in version 6.0. |
txnNumber |
NumberLong | The transaction number. Only present if the operation is part of a multi-document transaction. New in version 4.0. |
lsid |
Document | The identifier for the session associated with the transaction. Only present if the operation is part of a multi-document transaction. New in version 4.0. |
insert
Event¶
The following example illustrates an insert
event:
The documentKey
field includes both the _id
and the userName
field. This indicates that the engineering.users
collection is sharded,
with a shard key on userName
and _id
.
The fullDocument
document represents the version of the document at the
time of the insert.
update
Event¶
The following example illustrates an update
event:
The following example illustrates an update
event for change streams
opened with the fullDocument : updateLookup
option:
The fullDocument
document represents the most current majority-committed
version of the updated document. The fullDocument
document may vary from
the document at the time of the update operation depending on the number of
interleaving majority-committed operations that occur between the update
operation and the document lookup.
Starting in MongoDB 6.0, you see a fullDocumentBeforeChange
document with the fields before the document was changed (or deleted)
if you perform these steps:
- Enable the new
changeStreamPreAndPostImages
field for a collection usingdb.createCollection()
,create
, orcollMod
. - Set
fullDocumentBeforeChange
to"required"
or"whenAvailable"
indb.collection.watch()
.
Example fullDocumentBeforeChange
document in the change stream
output:
For complete examples with the change stream output, see Change Streams with Document Pre- and Post-Images.
Pre- and post-images are not available for a change stream event if the images were:
Not enabled on the collection at the time of a document update or delete operation.
Removed after the pre- and post-image retention time set in
expireAfterSeconds
.The following example sets
expireAfterSeconds
to100
seconds:The following example returns the current
changeStreamOptions
settings, includingexpireAfterSeconds
:Setting
expireAfterSeconds
tooff
uses the default retention policy: pre- and post-images are retained until the corresponding change stream events are removed from the oplog.If a change stream event is removed from the oplog, then the corresponding pre- and post-images are also deleted regardless of the
expireAfterSeconds
pre- and post-image retention time.
Additional considerations:
- Enabling pre- and post-images consumes storage space and adds processing time. Only enable pre- and post-images if you need them.
- Limit the change stream event size to less than 16 megabytes. To limit
the event size, you can:
- Limit the document size to 8 megabytes. You can request pre- and
post-images simultaneously in the change stream output if other change stream event fields like
updateDescription
are not large. - Request only post-images in the change stream output for documents
up to 16 megabytes if other change stream event fields like
updateDescription
are not large. - Request only pre-images in the change stream output for documents up
to 16 megabytes if:
- document updates affect only a small fraction of the document structure or content, and
- do not cause a
replace
change event. Areplace
event always includes the post-image.
- Limit the document size to 8 megabytes. You can request pre- and
post-images simultaneously in the change stream output if other change stream event fields like
- To request a pre-image, you set
fullDocumentBeforeChange
torequired
orwhenAvailable
indb.collection.watch()
. To request a post-image, you setfullDocument
using the same method. - Pre-images are written to the
config.system.preimages
collection.- The
config.system.preimages
collection may become large. To limit the collection size, you can setexpireAfterSeconds
time for the pre-images as shown earlier. - Pre-images are removed asynchronously by a background process.
- The
Important
Backward-Incompatible Feature
Starting in MongoDB 6.0, if you are using document pre- and post-images
for change streams, you must disable
changeStreamPreAndPostImages for each collection using
the collMod
command before you can downgrade to an earlier
MongoDB version.
See also
- For change stream events and output, see Change Events.
- To watch a collection for changes, see
db.collection.watch
. - For complete examples with the change stream output, see Change Streams with Document Pre- and Post-Images.
replace
Event¶
The following example illustrates a replace
event:
A replace
operation uses the update command, and consists of two stages:
- Delete the original document with the
documentKey
and - Insert the new document using the same
documentKey
The fullDocument
of a replace
event represents the document after the
insert of the replacement document.
Starting in MongoDB 6.0, you see a fullDocumentBeforeChange
document with the fields before the document was changed (or deleted)
if you perform these steps:
- Enable the new
changeStreamPreAndPostImages
field for a collection usingdb.createCollection()
,create
, orcollMod
. - Set
fullDocumentBeforeChange
to"required"
or"whenAvailable"
indb.collection.watch()
.
Example fullDocumentBeforeChange
document in the change stream
output:
For complete examples with the change stream output, see Change Streams with Document Pre- and Post-Images.
Pre- and post-images are not available for a change stream event if the images were:
Not enabled on the collection at the time of a document update or delete operation.
Removed after the pre- and post-image retention time set in
expireAfterSeconds
.The following example sets
expireAfterSeconds
to100
seconds:The following example returns the current
changeStreamOptions
settings, includingexpireAfterSeconds
:Setting
expireAfterSeconds
tooff
uses the default retention policy: pre- and post-images are retained until the corresponding change stream events are removed from the oplog.If a change stream event is removed from the oplog, then the corresponding pre- and post-images are also deleted regardless of the
expireAfterSeconds
pre- and post-image retention time.
Additional considerations:
- Enabling pre- and post-images consumes storage space and adds processing time. Only enable pre- and post-images if you need them.
- Limit the change stream event size to less than 16 megabytes. To limit
the event size, you can:
- Limit the document size to 8 megabytes. You can request pre- and
post-images simultaneously in the change stream output if other change stream event fields like
updateDescription
are not large. - Request only post-images in the change stream output for documents
up to 16 megabytes if other change stream event fields like
updateDescription
are not large. - Request only pre-images in the change stream output for documents up
to 16 megabytes if:
- document updates affect only a small fraction of the document structure or content, and
- do not cause a
replace
change event. Areplace
event always includes the post-image.
- Limit the document size to 8 megabytes. You can request pre- and
post-images simultaneously in the change stream output if other change stream event fields like
- To request a pre-image, you set
fullDocumentBeforeChange
torequired
orwhenAvailable
indb.collection.watch()
. To request a post-image, you setfullDocument
using the same method. - Pre-images are written to the
config.system.preimages
collection.- The
config.system.preimages
collection may become large. To limit the collection size, you can setexpireAfterSeconds
time for the pre-images as shown earlier. - Pre-images are removed asynchronously by a background process.
- The
Important
Backward-Incompatible Feature
Starting in MongoDB 6.0, if you are using document pre- and post-images
for change streams, you must disable
changeStreamPreAndPostImages for each collection using
the collMod
command before you can downgrade to an earlier
MongoDB version.
See also
- For change stream events and output, see Change Events.
- To watch a collection for changes, see
db.collection.watch
. - For complete examples with the change stream output, see Change Streams with Document Pre- and Post-Images.
delete
Event¶
The following example illustrates a delete
event:
The fullDocument
document is omitted as the document no longer exists at the
time the change stream cursor sends the delete
event to the client.
Starting in MongoDB 6.0, you see a fullDocumentBeforeChange
document with the fields before the document was changed (or deleted)
if you perform these steps:
- Enable the new
changeStreamPreAndPostImages
field for a collection usingdb.createCollection()
,create
, orcollMod
. - Set
fullDocumentBeforeChange
to"required"
or"whenAvailable"
indb.collection.watch()
.
Example fullDocumentBeforeChange
document in the change stream
output:
For complete examples with the change stream output, see Change Streams with Document Pre- and Post-Images.
Pre- and post-images are not available for a change stream event if the images were:
Not enabled on the collection at the time of a document update or delete operation.
Removed after the pre- and post-image retention time set in
expireAfterSeconds
.The following example sets
expireAfterSeconds
to100
seconds:The following example returns the current
changeStreamOptions
settings, includingexpireAfterSeconds
:Setting
expireAfterSeconds
tooff
uses the default retention policy: pre- and post-images are retained until the corresponding change stream events are removed from the oplog.If a change stream event is removed from the oplog, then the corresponding pre- and post-images are also deleted regardless of the
expireAfterSeconds
pre- and post-image retention time.
Additional considerations:
- Enabling pre- and post-images consumes storage space and adds processing time. Only enable pre- and post-images if you need them.
- Limit the change stream event size to less than 16 megabytes. To limit
the event size, you can:
- Limit the document size to 8 megabytes. You can request pre- and
post-images simultaneously in the change stream output if other change stream event fields like
updateDescription
are not large. - Request only post-images in the change stream output for documents
up to 16 megabytes if other change stream event fields like
updateDescription
are not large. - Request only pre-images in the change stream output for documents up
to 16 megabytes if:
- document updates affect only a small fraction of the document structure or content, and
- do not cause a
replace
change event. Areplace
event always includes the post-image.
- Limit the document size to 8 megabytes. You can request pre- and
post-images simultaneously in the change stream output if other change stream event fields like
- To request a pre-image, you set
fullDocumentBeforeChange
torequired
orwhenAvailable
indb.collection.watch()
. To request a post-image, you setfullDocument
using the same method. - Pre-images are written to the
config.system.preimages
collection.- The
config.system.preimages
collection may become large. To limit the collection size, you can setexpireAfterSeconds
time for the pre-images as shown earlier. - Pre-images are removed asynchronously by a background process.
- The
Important
Backward-Incompatible Feature
Starting in MongoDB 6.0, if you are using document pre- and post-images
for change streams, you must disable
changeStreamPreAndPostImages for each collection using
the collMod
command before you can downgrade to an earlier
MongoDB version.
See also
- For change stream events and output, see Change Events.
- To watch a collection for changes, see
db.collection.watch
. - For complete examples with the change stream output, see Change Streams with Document Pre- and Post-Images.
drop
Event¶
New in version 4.0.1.
A drop
event occurs when a collection is dropped from a database. The
following example illustrates a drop
event:
A drop
event leads to an invalidate event
for change streams opened against its ns
collection.
rename
Event¶
New in version 4.0.1.
A rename
event occurs when a collection is renamed. The following example
illustrates a rename
event:
A rename
event leads to an
invalidate event for change streams opened
against its ns
collection or to
collection.
Changed in version 6.0.
Starting in MongoDB 6.0, when the showExpandedEvents option is enabled for the change stream, the
rename
event includes an operationDescription
document. This document
provides a to
field showing the changed database and collection and a
dropTarget
field indicating whether the rename
operation removed the
collection before the rename.
dropDatabase
Event¶
New in version 4.0.1.
A dropDatabase
event occurs when a database is dropped. The following
example illustrates a dropDatabase
event:
A dropDatabase
command generates a
drop event for each collection in
the database before generating a dropDatabase
event for the database.
A dropDatabase
event leads to an
invalidate event for change streams opened
against its ns.db
database.
invalidate
Event¶
The following example illustrates an invalidate
event:
For change streams opened up against a collection, a drop event, rename event, or dropDatabase event that affects the watched collection leads to an invalidate event.
For change streams opened up against a database, a dropDatabase event that affects the watched database leads to an invalidate event.
invalidate
events close the change stream cursor.
You cannot use resumeAfter
to resume a change stream after an
invalidate event (for example, a collection
drop or rename) closes the stream. Starting in MongoDB 4.2, you can use
startAfter to start a new change
stream after an invalidate event.
createIndexes
Event¶
New in version 6.0.
A createIndexes
event occurs when an index is created on the collection and
the change stream has the showExpandedEvents
option set to true
.
The following example shows a createIndexes
event:
dropIndexes
Event¶
New in version 6.0.
A dropIndexes
event occurs when an index is dropped from the collection and
the change stream has the showExpandedEvents
option set to true
.
The following example shows a dropIndexes
event:
modify
Event¶
New in version 6.0.
A modify
event occurs when a collection is modified, such as when the
collMod
command adds or remove options from a collection or view.
The following example shows a modify
event:
create
Event¶
New in version 6.0.
A create
event occurs when a collection is created, such as when the
create
command explicitly adds a collection to a database.
The following example shows a create
event:
shardCollection
Event¶
New in version 6.0.
A shardCollection
event occurs when a collection is sharded.
The following example shows a shardCollection
event: