基于 vCore 的 Azure Cosmos DB for MongoDB 上的更改流 (预览版)

更改流是从数据库流到应用程序的数据库更改实时流。 借助此功能,可以通过订阅数据库更改来生成反应式应用程序,无需持续进行轮询来检测更改。

备注

请使用表单进行注册以注册你的兴趣。

配置更改流

此示例代码会在 exampleCollection 集合上启动更改流,以持续监视任何更改。 检测到更改后,它会检索更改事件,并采用 JSON 格式打印它。

// Open a change stream
const changeStream = db.exampleCollection.watch();

// Listen for changes
while (changeStream.hasNext()) 
    {
        const change = changeStream.next();
        printjson(change);
    }

重要

通过在打开游标时为 resumeAfter 指定恢复标记,可恢复更改流。 但预计有足够的历史记录来定位与该标记关联的操作。 在 _id 字段中的更改流中观察到的文档表示可恢复标记。

cursor = db.exampleCollection.watch(resume_after=resume_token)

使用更改流监视数据库更改

让我们通过示例来了解更改流输出。

在此更改流事件中,我们看到一条新记录 insertedcs 数据库中的 exampleCollection 集合中,事件详细信息包括新添加的文档的完整内容。

{
  "_id": { "_data": "AeARBpQ/AAAA" }, // "resume_token"
  "operationType": "insert",
  "fullDocument": {
    "_id": { "$oid": "66e6f63e6f49ecaabf794958" },
    "employee_id": "17986",
    "name": "John",
    "position": "Software Engineer",
    "department": "IT",
    "rating": 4
  },
  "ns": { "db": "cs", "coll": "exampleCollection" },
  "documentKey": { "_id": { "$oid": "66e6f63e6f49ecaabf794958" } }
}

个性化更改流中的数据

通过在配置期间指定一个或多个管道阶段的数组来自定义更改流输出。 支持的运算符包括以下内容。

  • $addFields
  • $match
  • $project
  • $set
  • $unset

限制

  • Replace 事件尚不受支持。
  • pre-image 仍是一个不受支持的选项。
  • 在当前状态下发生故障转移事件后,需要重新初始化更改流游标。
  • 尚不支持过去时间线的历史更改流事件。
  • Update 事件尚不支持更新说明。
  • 多分片群集上的更改流事件尚不受支持。
  • 分片集合上的更改流尚不受支持。
  • 尚不支持 showexpandedevents。 它包括 createIndexdropIndexcreateCollectionrename 等。
  • $changestream 作为另一个阶段的嵌套管道尚不受支持。