$changeStream(聚合)
在此页面上
定义
$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
事件之后恢复变更流。resumeAfter
与startAfter
和startAtOperationTime
互斥。showExpandedEvents
指定是否包含其他变更事件,例如 DDL 和索引操作。
6.0 版本中的新功能。
startAfter
可选。指定一个恢复令牌作为变更流的逻辑起点。与
resumeAfter
不同,startAfter
可在出现invalidate
事件之后通过创建新的变更流来恢复通知。startAfter
与resumeAfter
和startAtOperationTime
互斥。startAtOperationTime
指定一个时间作为变更流的逻辑起点。不能与resumeAfter
或startAfter
字段一起使用。
稳定的 API 支持
变更流包含在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") } }
有关变更流通知的更多信息,请参阅变更事件。