基于 vCore 的 Azure Cosmos DB for MongoDB 的变更流

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

注意

Azure Cosmos DB for MongoDB (vCore)目前支持单分片群集中的更改流。 我们正在努力在不久的将来为多分片群集提供变更流支持。

Azure Cosmos DB for MongoDB (vCore)对更改流施加 400 MB 的限制。 请提交支持请求以增加此限制。

启用更改流

可以使用 Azure CLI 或 ARM 模板启用或禁用此功能。 即将添加门户支持。

通过 CLI 在 vCore 群集上启用更改流的步骤

  1. 登录到 Azure CLI
az login
  1. 检索群集上功能标志的当前设置。 这可确保在添加新功能时保留任何现有标志。
az resource show --ids "/subscriptions/<sub id>/resourceGroups/<resource group name>/providers/Microsoft.DocumentDB/mongoClusters/<resource name of your Cosmos DB for MongoDB vCore cluster>" --api-version 2024-10-01-preview
  1. 发送 PATCH 请求以启用该功能。
az resource patch --ids "/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.DocumentDB/mongoClusters/<vCore_cluster_name>" --api-version 2024-10-01-preview --properties "{\"previewFeatures\": [ \"ChangeStreams\"]}"
  1. 验证结果:
    • 确保响应负载包括 "previewFeatures": ["ChangeStreams"]
    • 如果遇到错误“此群集不支持更改流”,请创建支持请求。

配置更改流

此示例代码会在 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)

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

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

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

{
  "_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

限制

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