On this page
Change Events
Change Events
The following document represents all possible fields that a change stream response document can have.
{
_id : { <BSON Object> },
"operationType" : "<operation>",
"fullDocument" : { <document> },
"ns" : {
"db" : "<database>",
"coll" : "<collection>"
},
"documentKey" : { "_id" : <value> },
"updateDescription" : {
"updatedFields" : { <document> },
"removedFields" : [ "<field>", ... ]
}
}
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 | Metadata related to the operation. Use this document as a |
operationType |
string | The type of operation that occurred. Can be any of the following values:
|
fullDocument |
document | The document created or modified by the operation. For For For |
ns |
document | The namespace of the database and collection the change stream is open against. |
ns.db |
string | The name of the database. |
ns.coll |
string | The name of the collection. |
documentKey |
document | The document that contains the _id of the document created or modified by the operation. 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. |
insert
Event
The following example illustrates an insert
event:
{
_id: { < Resume Token > },
operationType: 'insert',
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 the time of the insert.
update
Event
The following example illustrates an update
event:
{
_id: { < Resume Token > },
operationType: 'update',
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 streams opened with the fullDocument : updateLookup
option:
{
_id: { < Resume Token > },
operationType: 'update',
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-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.
replace
Event
The following example illustrates a replace
event:
{
_id: { < Resume Token > },
operationType: 'replace',
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 the insert of the replacement document.
delete
Event
The following example illustrates a delete
event:
{
_id: { < Resume Token > },
operationType: 'delete',
ns: {
db: 'engineering',
coll: 'users'
},
documentKey: {
_id: ObjectId("599af247bb69cd89961c986d")
}
}
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.
invalidate
Event
The following example illustrates an invalidate
event:
{
_id: { < Resume Token > },
operationType: 'invalidate'
}
For change stream opened against a collection, invalidate
events occur after a dropDatabase
, drop
, or renameCollection
command that affects the watched collection. invalidate
events close the change stream cursor and signal that any locally cached data is out of sync with the server.
invalidate
events close the change stream cursor.
You cannot resume a change stream after an invalidate event (for example, a collection drop or rename) closes the stream.