- 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
changeStreamPreAndPostImagesfield for a collection usingdb.createCollection(),create, orcollMod. - Set
fullDocumentBeforeChangeto"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
expireAfterSecondsto100seconds:The following example returns the current
changeStreamOptionssettings, includingexpireAfterSeconds:Setting
expireAfterSecondstooffuses 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
expireAfterSecondspre- 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
updateDescriptionare not large. - Request only post-images in the change stream output for documents
up to 16 megabytes if other change stream event fields like
updateDescriptionare 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
replacechange event. Areplaceevent 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
fullDocumentBeforeChangetorequiredorwhenAvailableindb.collection.watch(). To request a post-image, you setfullDocumentusing the same method. - Pre-images are written to the
config.system.preimagescollection.- The
config.system.preimagescollection may become large. To limit the collection size, you can setexpireAfterSecondstime 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
documentKeyand - 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
changeStreamPreAndPostImagesfield for a collection usingdb.createCollection(),create, orcollMod. - Set
fullDocumentBeforeChangeto"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
expireAfterSecondsto100seconds:The following example returns the current
changeStreamOptionssettings, includingexpireAfterSeconds:Setting
expireAfterSecondstooffuses 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
expireAfterSecondspre- 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
updateDescriptionare not large. - Request only post-images in the change stream output for documents
up to 16 megabytes if other change stream event fields like
updateDescriptionare 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
replacechange event. Areplaceevent 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
fullDocumentBeforeChangetorequiredorwhenAvailableindb.collection.watch(). To request a post-image, you setfullDocumentusing the same method. - Pre-images are written to the
config.system.preimagescollection.- The
config.system.preimagescollection may become large. To limit the collection size, you can setexpireAfterSecondstime 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
changeStreamPreAndPostImagesfield for a collection usingdb.createCollection(),create, orcollMod. - Set
fullDocumentBeforeChangeto"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
expireAfterSecondsto100seconds:The following example returns the current
changeStreamOptionssettings, includingexpireAfterSeconds:Setting
expireAfterSecondstooffuses 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
expireAfterSecondspre- 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
updateDescriptionare not large. - Request only post-images in the change stream output for documents
up to 16 megabytes if other change stream event fields like
updateDescriptionare 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
replacechange event. Areplaceevent 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
fullDocumentBeforeChangetorequiredorwhenAvailableindb.collection.watch(). To request a post-image, you setfullDocumentusing the same method. - Pre-images are written to the
config.system.preimagescollection.- The
config.system.preimagescollection may become large. To limit the collection size, you can setexpireAfterSecondstime 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: