简介
一份分步指南,帮助你打开、使用并验证 Watch 界面 — NoSqlStudio 内置的实时 change-stream 监视器。请按顺序从 Step 1 走到结尾。每个步骤都会告诉你该做什么以及会看到什么。
如何阅读本手册
每个步骤包含:
- 操作 — 准确的动作(点击、输入、运行某条命令)。
- 查看 — 屏幕上应该发生什么。这就是你的“通过 / 失败”。
- 原因 — 额外的上下文,仅在有帮助时出现(赶时间可以跳过)。
开始之前
概念
Watch 是什么
Watch 将数据库中正在发生的每一次插入、更新、删除以及其他变更实时显示出来,以卡片的形式滑入时间线中。它基于 MongoDB change streams 构建。
注意
Watch 需要 replica set
Change streams 是 replica set 的特性。Watch 支持 MongoDB Atlas 集群以及自托管的 replica sets,但不支持 standalone 服务器。将 Watch 指向 standalone 服务器的情况会在 Step 30 中讲到。
你需要:
- 1一个已连接的 MongoDB replica set — 一个 Atlas 集群或一个自托管的 replica set。
- 2另一个可以运行 shell 命令的标签 — Scratchpad 或 Mongo Shell 标签 — 用来产生变更。
- 3在下方的 shell 命令中,把
<database>和<collection>替换成你自己的名称。请始终先执行use <database>,确保命令作用于正确的数据库。
完整走读预计时间:约 20 分钟。
你的第一条被监视的变更
打开 Watch 并确认一条变更能抵达时间线。
连接到 replica set
用你的 connection string 把 NoSqlStudio 连接到 MongoDB replica set 或 Atlas 集群 — 例如 mongodb+srv://<user>:<password>@<cluster-host>/。
连接打开,并出现在侧边栏中。
打开 Watch Deployment
在工具栏中选择 Monitoring ▼ → Watch for Changes → Watch Deployment。
会出现一个新选项卡,带有 🎥 标题、一颗持续脉动的绿色 LIVE 状态药丸,以及集群的迷你地图,绿色的 PRIMARY 节点显示在其 secondaries 旁边。
插入一个测试文档
在另一个选项卡(Scratchpad)中,选择一个数据库并插入一个文档。请先执行 use 命令:
use <database>
db.test_cw.insertOne({ hello: "test1", n: 1 })看变更到达
切回 Watch 选项卡。
大约一秒钟内,一张针对 <database>.test_cw 的绿色 🟢 Insert 卡片从时间线顶部滑入。
这是该工具的核心 — 实时流已经连上并在传送变更。✅
过滤与导出
在多个集合中产生流量
在不同集合上运行几次 insert:
use <database>
db.orders.insertOne({ item: "book" })
db.users.insertOne({ name: "Ana" })
db.test_cw.insertOne({ n: 1 })每次 insert 都会滑入一张卡片。
过滤时间线
在标题栏的 🔍 filter 字段中输入一个集合名(例如 orders)。
只有命名空间匹配该文本的事件会保持可见。清空该字段即可重新显示全部内容。
导出事件
清空过滤后,点击 📥 Export。
可见的事件会被保存为 .ndjson 文件到你的 Downloads 文件夹。
概念
NDJSON。 每行一个 JSON 文档 — 一种适合事件流的自然格式,便于重新导入或 grep。
录制与回放
开始一段录制
在右侧面板中找到 🎬 Recording 卡片,把开关打开。
卡片切换到录制状态。
在录制过程中产生事件
在另一个选项卡中执行几次变更:
use <database>
db.test_cw.insertOne({ n: 1 })
db.test_cw.insertOne({ n: 2 })
db.test_cw.insertOne({ n: 3 })卡片显示实时计数,例如 recording • 3 events。
停止录制
关闭 🎬 Recording 开关。
录制会自动作为 .ndjson 文件下载。
从文件回放录制
点击 📂 Open recording 并选择刚才保存的 .ndjson 文件。
标题栏会出现一个紫色的 📂 replay (file) 徽标,录制的事件回到时间线。
退出回放模式
点击紫色 replay 徽标上的 ✕。
回放模式结束,实时流恢复。
回放最近的过去
在 ⏪ Replay 卡片上点击 Go back 5 minutes。
流会从过去几分钟开始重新打开,你能看到已经发生过的变更。
注意
仅当集群的 oplog 仍然保留这么长的历史时才有效。在繁忙的集群上,oplog 的时间窗口可能不到 5 分钟。
Webhooks 与告警
Watch 能把变更转发到外部 URL,并按规则弹出桌面告警。
获取一个测试 webhook URL
在浏览器中打开 https://webhook.site,复制它给你的唯一 URL(格式 https://webhook.site/<uuid>)。
添加 webhook
在 📡 Webhooks 卡片中粘贴 URL 并点击 + Add。
webhook 出现在列表中。
配置 webhook
点击 webhook 上的 ⚙ 展开其设置。把 HTTP 方法改为 PUT,添加一个 Authorization 头,值为 Bearer xxx,并在事件芯片中仅选择 🔴 Delete。
webhook 现在被配置为仅在 delete 时触发,以一个 PUT 请求携带你的请求头发送。
Insert — 不会转发任何内容
执行一次 insert:
use <database>
db.test_cw.insertOne({ foo: 1 })webhook.site 没有收到任何内容 — webhook 已被过滤为仅 delete。
Delete — webhook 触发
执行一次 delete:
use <database>
db.test_cw.deleteOne({ foo: 1 })webhook.site 收到一个 PUT 请求,带有 Authorization: Bearer xxx 头,正文中是 EJSON 格式的变更事件。卡片显示 ✓ 1 sent。
创建一个告警
在 🔔 Alerts 卡片中,给告警起个名字(例如 Deleted test),把命名空间模式设置为一个正则表达式 — ^.*\.test_cw$ — 然后点击 + Create alert。
告警出现在列表中。
缩小告警范围
点击告警上的 ⚙,在事件芯片中仅选择 🔴 Delete。
告警现在只会在匹配模式的 delete 上触发。
触发告警
再执行一次 delete:
use <database>
db.test_cw.deleteOne({ n: 1 })第一次时,系统会请求通知权限 — 允许一次即可。接着会出现一条原生桌面通知,播放一段声音,告警历史也会记录这次命中。
概念
告警工作并不需要录制处于打开状态 — 告警是独立评估的,其历史也是独立保留的。
声音与集群迷你地图
打开声音
在标题栏点击 🔔 Sound off,使其变为 Sound on。
听一次 insert
执行一次 insert:
use <database>
db.test_cw.insertOne({ n: 10 })播放一声短促的高音。
听一次 delete
执行一次 delete:
use <database>
db.test_cw.deleteOne({ n: 10 })播放一声低音 — 与 insert 不同的音高,这样你可以靠声音区分变更。
看迷你地图脉动
在集群迷你地图中,每当一个事件到达,绿色的 PRIMARY 节点都会以一圈扩散的环脉动一次。
行为与边界情况
持久化
关闭 Watch 选项卡(标签标题上的 ✕),再从菜单重新打开它。
你的 webhooks、告警、声音设置和 buffer 大小全部仍在。
刷新数据库列表
在另一个选项卡中创建一个新数据库,然后点击 Watch 标题栏中的 🔄 Refresh。
新数据库出现在 scope 下拉中。
buffer 大小
在标题栏的 Buffer 字段中输入 50。
只有最近 50 条事件保持可见 — 更早的卡片会被丢弃。
切换 scope 时清空
在 🌐 Cluster scope 上有一个流正在运行时,切到 🗄 单个数据库。
时间线被清空,流在新 scope 下重新启动。
对 standalone 给出人性化错误
连接到一个 standalone 的 MongoDB 服务器(而不是 replica set),并尝试 Watch Deployment。
一条清晰、友好的提示说明 Watch 需要 replica set — 而不是像 “$changeStream stage is only supported…” 这样的原始服务器错误。
原生 Tools 菜单
从 Tools 菜单打开 Watch
使用原生菜单:Tools → Change Watcher → Watch Deployment(快捷键 Ctrl+Alt+W)。
Watch 选项卡打开,与从工具栏打开完全一致。
注意
原生菜单在应用启动时构建。在应用内 reload(Ctrl+R)之后,菜单可能已过时 — 完整重启 NoSqlStudio 才能看到菜单变化。
清理(完成后)
用标题栏的 Stop 按钮停止流,然后删除测试集合:
use <database>
db.test_cw.drop()流被停止,测试集合被删除。
你已验证内容的总结
| 阶段 | 功能 |
|---|---|
| 1 | 打开 Watch 并看到一条实时变更抵达时间线 |
| 2 | 过滤时间线并将事件导出为 NDJSON |
| 3 | 录制事件、从文件回放,以及回放最近的过去 |
| 4 | Webhooks(方法、请求头、事件过滤)与桌面告警 |
| 5 | 按事件类型的声音提示,以及集群迷你地图的脉动 |
| 6 | 持久化、刷新、buffer、切换 scope 时的清空、人性化错误 |
| 7 | 原生 Tools 菜单入口及其快捷键 |