Change Events
Change Events
The following document represents all possible fields that a changestream response document can have.
- {
- _id : { <BSON Object> },
- "operationType" : "<operation>",
- "fullDocument" : { <document> },
- "ns" : {
- "db" : "<database>",
- "coll" : "<collection"
- },
- "to" : {
- "db" : "<database>",
- "coll" : "<collection"
- },
- "documentKey" : { "_id" : <value> },
- "updateDescription" : {
- "updatedFields" : { <document> },
- "removedFields" : [ "<field>", ... ]
- }
- "clusterTime" : <Timestamp>,
- "txnNumber" : <NumberLong>,
- "lsid" : {
- "id" : <UUID>,
- "uid" : <BinData>
- }
- }
Some fields are only available for certain operations, such as updates. Thefollowing table describes each field in the change stream response document:
Field | Type | Description |
---|---|---|
_id | document | Metadata related to the operation. Acts as the resumeToken for the resumeAfter parameter when resuming a change stream.The _data type depends on the MongoDB versionsand, in some cases, the feature compatibility version (fcv) atthe time of the change stream’s opening/resumption. For details,see Resume Tokens. |
operationType | string | The type of operation that occurred. Can be any of the followingvalues:- insert - delete - replace - update - drop - rename - dropDatabase - invalidate |
fullDocument | document | The document created or modified by the insert , replace ,delete , update operations (i.e. CRUD operations).For insert and replace operations, this represents the newdocument created by the operation.For delete operations, this field is omitted as the document nolonger exists.For update operations, this field only appears if you configuredthe change stream with fullDocument set to updateLookup . Thisfield then represents the most current majority-committed version ofthe document modified by the update operation. Thisdocument may differ from the changes described in updateDescription if other majority-committed operations modified the document betweenthe original update operation and the full document lookup. |
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 dropDatabase operations, this field is omitted. |
to | document | When operationType : rename , this document displays the new name forthe ns collection. This document is omitted for all othervalues 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 thedocument. The _id field is not repeated if it is already apart of the shard key. |
updateDescription | document | A document describing the fields that were updated or removedby the update operation.This document and its fields only appears if the operationType isupdate . |
updateDescription.updatedFields | document | A document whose keys correspond to the fields that were modified by theupdate operation. The value of each field corresponds to the newvalue of those fields, rather than the operation that resulted in thenew value. |
updateDescription.removedFields | array | An array of fields that were removed by the update operation. |
clusterTime | Timestamp | The timestamp from the oplog entry associated with the event.For events that happened as part of a multi-documenttransaction, the associated change streamnotifications will have the same clusterTime value, namelythe time when the transaction was committed.On a sharded cluster, events that occur on different shards canhave the same clusterTime but be associated with differenttransactions or even not be associcated with any transaction. Toidentify events for a single transaction, you can use thecombination of lsid and txnNumber in the change streamevent document.New in version 4.0. |
txnNumber | NumberLong | The transaction number.Only present if the operation is part of a multi-documenttransaction.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-documenttransaction.New in version 4.0. |
insert Event
The following example illustrates an insert
event:
- {
- _id: { < Resume Token > },
- operationType: 'insert',
- clusterTime: <Timestamp>,
- ns: {
- db: 'engineering',
- coll: 'users'
- },
- documentKey: {
- userName: 'alice123',
- _id: ObjectId("599af247bb69cd89961c986d")
- },
- fullDocument: {
- _id: ObjectId("599af247bb69cd89961c986d"),
- userName: 'alice123',
- name: 'Alice'
- }
- }
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 thetime of the insert.
update Event
The following example illustrates an update
event:
- {
- _id: { < Resume Token > },
- operationType: 'update',
- clusterTime: <Timestamp>,
- ns: {
- db: 'engineering',
- coll: 'users'
- },
- documentKey: {
- _id: ObjectId("58a4eb4a30c75625e00d2820")
- },
- updateDescription: {
- updatedFields: {
- email: 'alice@10gen.com'
- },
- removedFields: ['phoneNumber']
- }
- }
The following example illustrates an update
event for change streamsopened with the fullDocument : updateLookup
option:
- {
- _id: { < Resume Token > },
- operationType: 'update',
- clusterTime: <Timestamp>,
- ns: {
- db: 'engineering',
- coll: 'users'
- },
- documentKey: {
- _id: ObjectId("58a4eb4a30c75625e00d2820")
- },
- updateDescription: {
- updatedFields: {
- email: 'alice@10gen.com'
- },
- removedFields: ['phoneNumber']
- },
- fullDocument: {
- _id: ObjectId("58a4eb4a30c75625e00d2820"),
- name: 'Alice',
- userName: 'alice123',
- email: 'alice@10gen.com',
- team: 'replication'
- }
- }
The fullDocument
document represents the most current majority-committedversion of the updated document. The fullDocument
document may vary fromthe document at the time of the update operation depending on the number ofinterleaving majority-committed operations that occur between the updateoperation and the document lookup.
replace Event
The following example illustrates a replace
event:
- {
- _id: { < Resume Token > },
- operationType: 'replace',
- clusterTime: <Timestamp>,
- ns: {
- db: 'engineering',
- coll: 'users'
- },
- documentKey: {
- _id: ObjectId("599af247bb69cd89961c986d")
- },
- fullDocument: {
- _id: ObjectId("599af247bb69cd89961c986d"),
- userName: 'alice123',
- name: 'Alice'
- }
- }
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 theinsert of the replacement document.
delete Event
The following example illustrates a delete
event:
- {
- _id: { < Resume Token > },
- operationType: 'delete',
- clusterTime: <Timestamp>,
- ns: {
- db: 'engineering',
- coll: 'users'
- },
- documentKey: {
- _id: ObjectId("599af247bb69cd89961c986d")
- }
- }
The fullDocument
document is omitted as the document no longer exists at thetime the change stream cursor sends the delete
event to the client.
drop Event
New in version 4.0.1.
A drop
event occurs when a collection is dropped from a database. Thefollowing example illustrates a drop
event:
- {
- _id: { < Resume Token > },
- operationType: 'drop',
- clusterTime: <Timestamp>,
- ns: {
- db: 'engineering',
- coll: 'users'
- }
- }
A drop
event leads to an invalidate eventfor 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 exampleillustrates a rename
event:
- {
- _id: { < Resume Token > },
- operationType: 'rename',
- clusterTime: <Timestamp>,
- ns: {
- db: 'engineering',
- coll: 'users'
- },
- to: {
- db: 'engineering',
- coll: 'people'
- }
- }
A rename
event leads to aninvalidate event for change streams openedagainst its ns
collection or to
collection.
dropDatabase Event
New in version 4.0.1.
A dropDatabase
event occurs when a database is dropped. The followingexample illustrates a dropDatabase
event:
- {
- _id: { < Resume Token > },
- operationType: 'dropDatabase',
- clusterTime: <Timestamp>,
- ns: {
- db: 'engineering'
- }
- }
A dropDatabase
command generates adrop event for each collection inthe database before generating a dropDatabase
event for the database.
A dropDatabase
event leads to aninvalidate event for change streams openedagainst its ns.db
database.
invalidate Event
The following example illustrates an invalidate
event:
- {
- _id: { < Resume Token > },
- operationType: 'invalidate',
- clusterTime: <Timestamp>
- }
For change streams opened up against a collection, adrop event,rename event, ordropDatabase event that affects thewatched collection leads to aninvalidate event.
For change streams opened up against a database, adropDatabase event that affects thewatched database leads to aninvalidate event.
invalidate
events close the change stream cursor.
You cannot use resumeAfter
to resume a change stream after aninvalidate event (for example, a collectiondrop or rename) closes the stream. Starting in MongoDB 4.2, you can usestartAfter to start a new changestream after an invalidate event.