$changeStream

聚合 $changeStream 阶段将打开一个更改流游标,用于实时跟踪数据更改。 此阶段使应用程序能够响应集合中发生的插入、更新、删除和其他作。

Syntax

$changeStream 阶段的语法如下所示:

{
  $changeStream: {
    allChangesForCluster: <boolean>,
    fullDocument: <string>,
    fullDocumentBeforeChange: <string>,
    resumeAfter: <ResumeToken>,
    startAfter: <ResumeToken>,
    startAtOperationTime: <Timestamp>,
    showExpandedEvents: <boolean>
  }
}

参数

参数 Description
allChangesForCluster 可选。 布尔值。 如果为 true,则返回整个群集的更改。 默认值为 false。
fullDocument 可选。 String. 确定要返回的更新作的内容。 选项:“default”、“updateLookup”、“whenAvailable”、“required”。
fullDocumentBeforeChange 可选。 String. 返回文档的预映像。 选项:“off”、“whenAvailable”、“required”。
resumeAfter 可选。 恢复令牌以在特定事件后恢复更改流。
startAfter 可选。 恢复令牌,以在特定事件后启动更改流。
startAtOperationTime 可选。 从特定时间开始更改流的时间戳。
showExpandedEvents 可选。 布尔值。 包括另一个更改流事件。 默认值为 false。

例子

让我们了解存储集合的使用情况,以便监视实时更改。

示例 1:监视存储集合中的所有更改

该示例演示如何设置更改流以监视存储集合中的所有更改。

db.stores.aggregate([
  {
    $changeStream: {
      fullDocument: "updateLookup"
    }
  }
])

更新存储文档时,更改流将返回包含完整文档的更改事件。

{
  "_id": { "_data": "AeARBpQ/AAAA" },
  "operationType": "update",
  "fullDocument": {
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
    "name": "Trey Research | Home Office Depot - Lake Freeda",
    "sales": {
      "revenue": 42500
    },
    "company": "Trey Research",
    "lastUpdated": ISODate("2024-06-16T10:30:00.000Z")
  },
  "ns": {
    "db": "StoreData",
    "coll": "stores"
  },
  "documentKey": {
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac"
  }
}