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

$changeStream(聚合)

在此页面上

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

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

$changeStream 阶段采用以下语法:

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

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

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

  • updateLookup:更改通知包括由更改修改的文档的副本。该文档是当前多数提交文档,如果该多数提交文档不再存在,则为 null

对于部分更新,变更通知还提供变更的描述。

resumeAfter

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

resumeAfterstartAfterstartAtOperationTime 互斥。

startAfter

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

startAfterresumeAfterstartAtOperationTime 互斥。

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

变更流包含在Stable 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 }),
"fullDocument": {
"_id": ObjectId("62e2ee54c8756c0d5cf6f072"),
"name": "Walker Percy"
},
"ns": {
"db": "test",
"coll": "names"
},
"documentKey": { _id: ObjectId("62e2ee54c8756c0d5cf6f072") }
}

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

后退

$bucketAuto