$changeStream(聚合)
在此页面上
定义
$changeStream
返回集合、数据库或整个集群上的变更流游标。 必须用作聚合管道中的第一阶段。
$changeStream
阶段采用以下语法:{ $changeStream: { allChangesForCluster: <boolean>, fullDocument: <string>, resumeAfter: <document> startAfter: <document> startAtOperationTime: <timestamp> } } Parameter说明allChangesForCluster
可选:设置变更流是否应包括集群中的所有更改。只能在admin
数据库中打开。fullDocument
可选:指定在通过
update
操作执行修改时,变更通知是否包含完整文档的副本。default
:更改通知不包含update
操作的完整文档。updateLookup
:更改通知包括由更改修改的文档的副本。该文档是当前多数提交文档,如果该多数提交文档不再存在,则为null
。
对于部分更新,变更通知还提供变更的描述。
resumeAfter
可选。指定一个恢复令牌作为变更流的逻辑起点。无法用于在
invalidate
事件之后恢复变更流。resumeAfter
与startAfter
和startAtOperationTime
互斥。startAfter
可选。指定一个恢复令牌作为变更流的逻辑起点。与
resumeAfter
不同,startAfter
可在出现invalidate
事件之后通过创建新的变更流来恢复通知。startAfter
与resumeAfter
和startAtOperationTime
互斥。startAtOperationTime
指定一个时间作为变更流的逻辑起点。不能与resumeAfter
或startAfter
字段一起使用。
稳定的 API 支持
变更流包含在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") } }
有关变更流通知的更多信息,请参阅变更事件。