MongoDB聚合操作:$changeStream

返回集合、数据库或整个群集上的Change Stream游标。必须在聚合管道的第一阶段使用。

语法

js 复制代码
{
  $changeStream: {
    allChangesForCluster: <boolean>,
    fullDocument: <string>,
    fullDocumentBeforeChange: <string>,
    resumeAfter: <int>
    showExpandedEvents: <boolean>,
    startAfter: <document>
    startAtOperationTime: <timestamp>
  }
}

allChangesForCluster

可选:设置Change Stream是否包括群集中的所有更改。可能只能在管理数据库中打开。

fullDocument

可选:指定update操作修改时,更改通知是否包含完整文档的副本。

  • default:更改通知不包括更新操作的完整文档。

  • required:更改通知包括更改后文档的副本。如果找不到文档,change stream 将会出错。

    要使用此选项,必须先使用 collMod 命令启用 changeStreamPreAndPostImages 选项。

    6.0 版新增功能。

  • updateLookup:更改通知包括更改所修改文档的副本。该文档是当前大多数已提交的文档,如果已不存在,则为空。

  • whenAvailable:变更通知包括一份变更后立即出现的被修改文档的副本,如果文档不可用,则为空。

    要使用此选项,必须先使用 collMod 命令启用 changeStreamPreAndPostImages 选项。

    6.0 版新增功能。

在部分更新的情况下,更改通知还会提供更改说明。

fullDocumentBeforeChange

包括更改前的完整文档。该字段接受以下值:

  • off:禁用包含更改前的文档。

  • whenAvailable:包含修改前的文档。如果未修改的文档不可用,查询不会失败。

  • required:包含更改前的文档。如果未修改的文档不可用,查询将失败。

resumeAfter

指定一个恢复标记作为更改流的逻辑起点。不能与 startAfter 或 startAtOperationTime 字段一起使用。

showExpandedEvents

指定是否包含其他更改事件,如 DDL 和索引操作。

6.0 版新增功能。

startAfter

指定一个恢复标记作为更改流的逻辑起点。不能与 resumeAfter 或 startAtOperationTime 字段一起使用。

startAtOperationTime

指定一个时间作为更改流的逻辑起点。不能与 resumeAfter 或 startAfter 字段一起使用。

举例

使用下面的聚合命令创建一个change stream 游标。

js 复制代码
var cur = db.names.aggregate( [
   { $changeStream: {} }
] )

运行cur打开光标。

当Change Stream检测到更改时,next()方法会返回更改事件通知。例如,在运行cur.next() 之后,MongoDB 会返回与下面类似的文档:

json 复制代码
{
   "_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") }
}
相关推荐
AC赳赳老秦9 小时前
OpenClaw 数据引用规范自动生成:为公开数据构建可信来源标注与标准引用体系
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
小蒜学长9 小时前
校园社团招新网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·校园社团招新网站
布莱克60510 小时前
MySQL 增删改查(CRUD)语法详解
数据库·mysql·增删改查
Dovis(誓平步青云)10 小时前
几个方案来回选不定?做一个随时切换的候选推荐页
android·java·服务器·开发语言·javascript·数据库·智能化
2501_9336707911 小时前
2027届大数据管理与应用求职数字化转型顾问:项目、SQL、业务理解怎么排优先级
数据库·sql
东方护航数据恢复(深圳)12 小时前
物流案例:勒索病毒 Mallox 加密 ERP 数据库,旧备份 + 残留页重组实录【东方护航数据恢复深圳店】
数据库·数据恢复·勒索病毒·二次开盘·开盘·数据镜像
.Hypocritical.12 小时前
Redis从入门到实战:核心原理、场景落地与避坑指南
数据库·redis·缓存
梦想画家12 小时前
SQLMesh Python 模型入门(二):依赖管理、引擎实战与内存优化
数据库·python·sqlmesh
Omics Pro13 小时前
经典多组学整合算法→商用云平台
数据库·人工智能·算法·机器学习·自然语言处理
xcLeigh13 小时前
【KingbaseES数据库教程】国产化信创背景下的数据库选型与初识
linux·数据库·windows·kes·数据选型