文档菜单
文档首页
/
MongoDB 手册
/ / /

更改流(聚合)

本页内容

  • 定义
  • 稳定的API支持
  • 示例
$changeStream

返回一个更改流游标,应用于集合、数据库或整个集群。必须在聚合管道的第一阶段使用。

阶段$changeStream具有以下语法

{
$changeStream: {
allChangesForCluster: <boolean>,
fullDocument: <string>,
fullDocumentBeforeChange: <string>,
resumeAfter: <document>
showExpandedEvents: <boolean>,
startAfter: <document>
startAtOperationTime: <timestamp>
}
}
参数
描述
allChangesForCluster
可选:设置是否更改流应包含集群中的所有更改。仅可在admin数据库上打开。
fullDocument

可选:指定更改通知是否包含在update操作修改时的完整文档副本。

  • 默认:更改通知在update操作中不包含完整文档。

  • 必需:更改通知包含修改后立即出现的修改文档副本。如果找不到文档,更改流将抛出错误。

    要使用此选项,您必须首先使用collMod命令来启用changeStreamPreAndPostImages选项。

    新功能在版本中6.0.

  • updateLookup:更改通知包含更改修改的文档副本。此文档是当前大多数已提交的文档或如果它不存在则为null

  • whenAvailable:更改通知包含更改后立即出现的修改文档副本或如果文档不可用则为null

    要使用此选项,您必须首先使用collMod命令来启用changeStreamPreAndPostImages选项。

    新功能在版本中6.0.

在部分更新的情况下,更改通知还提供更改的描述。

fullDocumentBeforeChange

包含更改之前的完整文档。该字段接受以下值

  • off:禁用包含更改之前的文档。

  • whenAvailable:包含更改之前的文档。如果未修改的文档不可用,则查询不会失败。

  • required:包含更改之前的文档。如果未修改的文档不可用,则查询会失败。

resumeAfter

可选。指定一个恢复令牌作为更改流的逻辑起始点。不能用于在invalidate事件之后恢复更改流。

resumeAfterstartAfterstartAtOperationTime互斥。

showExpandedEvents

指定是否包含额外的更改事件,例如DDL和索引操作。

新功能在版本中6.0.

startAfter

可选。指定一个恢复令牌作为更改流的逻辑起始点。与resumeAfter不同,startAfter可以通过创建新的更改流来在invalidate事件之后恢复通知。

startAfterresumeAfterstartAtOperationTime互斥。

startAtOperationTime
指定一个时间作为更改流的逻辑起始点。不能与resumeAfterstartAfter字段一起使用。

变更流包含在稳定API V1中。然而,showExpandedEvents选项不包括在稳定API V1中。

要使用聚合阶段创建变更流游标,请运行aggregate命令。

var cur = db.names.aggregate( [
{ $changeStream: {} }
] )

要打开游标,运行cur

当变更流检测到变更时,next()方法返回变更事件通知。例如,运行cur.next()后,MongoDB返回类似于以下文档的结果

{
"_id": {
_data: "8262E2EE54000000022B022C0100296E5A100448E5E3DD01364019AE8FE8C6859527E046645F6964006462E2EE54C8756C0D5CF6F0720004"
},
"operationType": "insert",
"clusterTime": Timestamp({ t: 1659039316, i: 2 }),
"wallTime": ISODate("2022-07-28T20:15:16.148Z"),
"fullDocument": {
"_id": ObjectId("62e2ee54c8756c0d5cf6f072"),
"name": "Walker Percy"
},
"ns": {
"db": "test",
"coll": "names"
},
"documentKey": { _id: ObjectId("62e2ee54c8756c0d5cf6f072") }
}

有关变更流通知的更多信息,请参阅变更事件。

返回

自动存储桶