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