On this page
Change Events
在本页面
Change Events
以下文档表示变更流响应文档可以具有的所有可能的字段。
{
_id : { <BSON Object> },
"operationType" : "<operation>",
"fullDocument" : { <document> },
"ns" : {
"db" : "<database>",
"coll" : "<collection>"
},
"documentKey" : { "_id" : <value> },
"updateDescription" : {
"updatedFields" : { <document> },
"removedFields" : [ "<field>", ... ]
}
}
有些字段仅适用于某些操作,例如更新。下表描述了变更流响应文档中的每个字段:
Field | Type | Description |
---|---|---|
_id |
document | 与操作有关的元数据。 |
恢复更改流时,请将此文档用作resumeAfter
参数的resumeToken
。
| operationType
| string |发生的操作类型。可以是以下任何值:insert
delete
replace
update
invalidate
|
| fullDocument
| document |由操作创建或修改的文档。
对于insert
和replace
操作,这表示该操作创建的新文档。
对于delete
操作,此字段将被省略,因为该文档不再存在。
对于update
操作,仅当您将fullDocument
设置为updateLookup
配置更改流时,才会显示此字段。然后,此字段表示由更新操作修改的文档的最新多数提交版本。如果其他多数提交的操作在原始更新操作和完整文档查找之间修改了文档,则此文档可能与updateDescription
中描述的更改有所不同。
| ns
| document |更改流针对的数据库和集合的名称空间。
| ns.db
| string |数据库的名称。
| ns.coll
|字符串|集合的名称。
| documentKey
| document |包含由操作创建或修改的文档_id
的文档。对于分片集合,还显示文档的完整分片键。如果_id
字段已经是分片键的一部分,则不会重复。
| updateDescription
| document |描述由更新操作更新或删除的字段的文档。
仅当operationType
为update
时,才会显示此文档及其字段。
| updateDescription.updatedFields
| document |文档,其关键字对应于通过更新操作修改的字段。每个字段的值对应于那些字段的新值,而不是导致新值的运算。
| updateDescription.removedFields
| array |由更新操作删除的字段数组。
insert Event
以下示例说明了一个insert
事件:
{
_id: { < Resume Token > },
operationType: 'insert',
ns: {
db: 'engineering',
coll: 'users'
},
documentKey: {
userName: 'alice123',
_id: ObjectId("599af247bb69cd89961c986d")
},
fullDocument: {
_id: ObjectId("599af247bb69cd89961c986d"),
userName: 'alice123',
name: 'Alice'
}
}
documentKey
字段同时包含_id
和userName
字段。这表明engineering.users
集合已分片,并且在userName
和_id
上具有分片键。
fullDocument
文档代表插入时文档的版本。
update Event
以下示例说明了一个update
事件:
{
_id: { < Resume Token > },
operationType: 'update',
ns: {
db: 'engineering',
coll: 'users'
},
documentKey: {
_id: ObjectId("58a4eb4a30c75625e00d2820")
},
updateDescription: {
updatedFields: {
email: 'alice@10gen.com'
},
removedFields: ['phoneNumber']
}
}
以下示例说明了使用fullDocument : updateLookup
选项打开的更改流的update
事件:
{
_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'
}
}
fullDocument
文档代表更新后文档的最新的多数提交版本。 fullDocument
文档可能与更新操作时的文档有所不同,这取决于在更新操作和文档查找之间发生的交错多数授权操作的数量。
replace Event
以下示例说明了一个replace
事件:
{
_id: { < Resume Token > },
operationType: 'replace',
ns: {
db: 'engineering',
coll: 'users'
},
documentKey: {
_id: ObjectId("599af247bb69cd89961c986d")
},
fullDocument: {
_id: ObjectId("599af247bb69cd89961c986d"),
userName: 'alice123',
name: 'Alice'
}
}
replace
操作使用 update 命令,并且包括两个阶段:
用
documentKey
删除原始文档,然后使用相同的
documentkey
插入新文档
replace
事件的fullDocument
代表插入替换文档后的文档。
delete Event
以下示例说明了一个delete
事件:
{
_id: { < Resume Token > },
operationType: 'delete',
ns: {
db: 'engineering',
coll: 'users'
},
documentKey: {
_id: ObjectId("599af247bb69cd89961c986d")
}
}
fullDocument
文档被省略,因为在更改流游标向 Client 端发送delete
事件时该文档不再存在。
invalidate Event
以下示例说明了一个invalidate
事件:
{
_id: { < Resume Token > },
operationType: 'invalidate'
}
对于针对集合打开的变更流,在影响受监视集合的dropDatabase,drop或renameCollection命令之后发生invalidate
事件。 invalidate
事件关闭更改流游标并发出 signal,表明任何本地缓存的数据均与服务器不同步。
invalidate
事件关闭更改流游标。
invalidate event(例如,收藏夹放置或重命名)关闭流后,您将无法恢复更改流。