变更流允许应用程序订阅 MongoDB 数据中的实时变化——当文档被插入、更新或删除时接收通知。它们启用反应式、事件驱动的功能(实时更新、同步、触发器),无需轮询数据库。构建在副本集 oplog 之上。
监听变更
js
changeStream = db.().();
changeStream.(, {
.(change.);
.(change.);
});
变更流允许应用程序订阅 MongoDB 数据中的实时变化——当文档被插入、更新或删除时接收通知。它们启用反应式、事件驱动的功能(实时更新、同步、触发器),无需轮询数据库。构建在副本集 oplog 之上。
changeStream = db.().();
changeStream.(, {
.(change.);
.(change.);
});
变更流为每个变更(插入/更新/删除)发出一个事件,包含有关变更内容的详情——使应用程序实时响应。
// watch only specific changes with an aggregation pipeline filter
db.collection("orders").watch([
{ $match: { operationType: "insert", "fullDocument.status": "urgent" } }
]);
// resume from where you left off (resilient to disconnections)
db.collection("orders").watch([], { resumeAfter: lastChangeToken });
你可以过滤变更(仅监听特定操作或文档)并在断开连接后恢复(使用恢复令牌)——使变更流更加可靠。
✓ REAL-TIME features — push live updates to clients (websockets) when data changes
✓ SYNCING — keep a cache, search index (Elasticsearch), or another system in sync
✓ EVENT-DRIVEN architecture — trigger workflows/notifications on data changes
✓ AUDITING — log changes; analytics on data modifications
→ All WITHOUT polling the database repeatedly (efficient, real-time)
❌ POLLING — repeatedly query "what changed?" → inefficient, latency, load on the DB
✅ CHANGE STREAMS — the database PUSHES changes to you in real time → efficient, instant
→ The right way to react to data changes (requires a replica set).
变更流是构建实时、反应式、事件驱动应用程序的宝贵 MongoDB 功能,因此理解它们对需要实时数据反应性的现代应用程序来说是有价值的高级知识。
核心价值在于使应用程序能够实时响应数据变化——在文档被插入、更新或删除时接收推送通知——这为重要能力提供支持:实时功能(当数据变化时通过 websocket 向客户端推送实时更新——协作应用、仪表板、通知的常见需求)、同步(当数据变化时保持缓存、搜索索引如 Elasticsearch 或其他系统与 MongoDB 一致)、事件驱动架构(在数据变化时触发工作流、通知或处理)和审计。
关键优势是实现所有这一切无需轮询——变更流让数据库推送变更给应用程序,即时且高效,取代了反复查询