Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

$changeStream(聚合)

在此页面上

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

返回集合、数据库或整个集群上的变更流游标。 必须用作聚合管道中的第一阶段。

$changeStream 阶段采用以下语法:

{
$changeStream: {
allChangesForCluster: <boolean>,
fullDocument: <string>,
fullDocumentBeforeChange: <string>,
resumeAfter: <document>
showExpandedEvents: <boolean>,
startAfter: <document>
startAtOperationTime: <timestamp>
}
}
Parameter
说明
allChangesForCluster
可选:设置变更流是否应包括集群中的所有更改。只能在 admin 数据库中打开。
fullDocument

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

  • default:更改通知不包含 update 操作的完整文档。

  • required:更改通知包括更改后立即出现的已修改文档的副本。如果找不到文档,变更流将引发错误。

    要使用该选项,必须先使用 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 字段一起使用。

变更流包含在Stable API V1 中。 但是, Stable APIV 中不包含 showExpandedEvents 选项。1

如需使用聚合阶段创建变更流游标,请运行 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") }
}

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

后退

$bucketAuto