删除事件
概要
删除
当操作从集合中删除文档时,如用户或应用程序执行
delete
命令时,会发生delete
事件。delete
命令。
描述
字段 | 类型 | 描述 | |||
---|---|---|---|---|---|
_id | 文档 | 一个作为更改流事件标识符的 BSON 对象。此值用作恢复更改流时
有关使用 | |||
clusterTime | 时间戳 |
由于 oplog 大小限制,多文档事务可能会创建多个 oplog 条目。在事务中,给定 oplog 条目中排队的更改流事件共享相同的 具有相同 要标识单个事务的事件,您可以在更改流事件文档中使用 更改版本8.0. | |||
collectionUUID | UUID | UUID 识别发生更改的集合。 新版本6.0. | |||
documentKey | 文档 | 包含由CRUD操作创建或修改的文档的 对于分片集合,此字段还显示文档的完整分片键。如果 | |||
lsid | 文档 | 与事务关联的会话的标识符。 仅在操作是多文档事务的一部分时存在。 | |||
ns | 文档 | 受事件影响的数据命名空间(数据库和或集合)。 | |||
ns.coll | string | 事件发生的集合的名称。 | |||
ns.db | string | 事件发生的数据库的名称。 | |||
operationDescription | 文档 | ||||
operationType | string | 更改通知报告的操作类型。 这些更改事件返回值为 | |||
txnNumber | NumberLong | ||||
wallTime | 数据库操作的数据库服务器日期和时间。 新版本6.0. |
行为
文档的预和后映像
从MongoDB 6.0开始,如果您执行以下步骤,将看到一个包含文档更改(或删除)前的字段的fullDocumentBeforeChange
文档:
使用
db.createCollection()
、create
或collMod
启用集合的新changeStreamPreAndPostImages
字段。在
db.collection.watch()
中将fullDocumentBeforeChange
设置为“required
”或“whenAvailable
”。
变更流输出中的fullDocumentBeforeChange
文档示例
"fullDocumentBeforeChange" : { "_id" : ObjectId("599af247bb69cd89961c986d"), "userName" : "alice123", "name" : "Alice Smith" }
有关带有变更流输出的完整示例,请参阅带有文档前后的变更流。
如果图像在文档更新或删除操作时未启用,则变更流事件中不可用预和后图像。
在文档更新或删除操作时未在集合上启用。
在
expireAfterSeconds
中设置的预和后图像保留时间后已删除。以下示例将整个集群上的
expireAfterSeconds
设置为100秒use admin db.runCommand( { setClusterParameter: { changeStreamOptions: { preAndPostImages: { expireAfterSeconds: 100 } } } } ) 以下示例返回当前的
changeStreamOptions
设置,包括expireAfterSeconds
db.adminCommand( { getClusterParameter: "changeStreamOptions" } ) 将
expireAfterSeconds
设置为“off
”将使用默认的保留策略:预和后图像保留到相应的变更流事件从oplog中删除。如果从oplog中删除了变更流事件,则相关的预和后图像也将被删除,无论
expireAfterSeconds
预和后图像保留时间如何。
其他注意事项
启用预和后图像会消耗存储空间并增加处理时间。只有当您需要它们时才启用预和后图像。
将变更流事件大小限制在小于16兆字节。要限制事件大小,您可以
将文档大小限制为8兆字节。如果其他变更流事件字段(如
updateDescription
)不大,您可以在变更流输出中同时请求预和后图像。如果其他变更流事件字段(如
updateDescription
)不大,则在变更流输出中仅请求16兆字节以下文档的后图像。如果以下条件满足,则在变更流输出中仅请求16兆字节以下文档的前图像:
文档更新仅影响文档结构或内容的一小部分
并且不会引起
replace
更改事件。替换事件始终包括后图像。
要请求前图像,请在
db.collection.watch()
中将fullDocumentBeforeChange
设置为“required
”或“whenAvailable
”。要请求后图像,请使用相同的方法设置fullDocument
。预映像被写入到
config.system.preimages
集合中。config.system.preimages
集合可能会变得很大。为了限制集合大小,您可以设置预映像的expireAfterSeconds
时间,如前所述。预映像由后台进程异步删除。
重要
不兼容特性
从 MongoDB 6.0 开始,如果您使用文档预映像和后映像进行 更改流,您必须使用 changeStreamPreAndPostImages 命令禁用每个集合,然后才能将数据库降级到更早的 MongoDB 版本。
示例
以下示例说明了 delete
事件
{ "_id": { <Resume Token> }, "operationType": "delete", "clusterTime": <Timestamp>, "wallTime": <ISODate>, "ns": { "db": "engineering", "coll": "users" }, "documentKey": { "_id": ObjectId("599af247bb69cd89961c986d") } }
省略了 fullDocument
文档,因为在该更改流游标发送 delete
事件到客户端时,该文档已不存在。