⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

实时物化视图:用 $merge 实现秒级销售漏斗聚合

利用聚合管道的 $merge 阶段将增量计算结果写入物化集合,替代 MapReduce · 难度:入门 · +10XP

实时物化视图:用 $merge 实现秒级销售漏斗聚合

物化视图在传统数据库中很常见,但 MongoDB 直到 4.2 才通过 $merge 原生支持。本教程摒弃 ETL 轮询,直接在一个聚合管道里完成:从原始事件集合读取点击流数据,按用户分桶、计算每个阶段的转化率,最后用 $merge 将结果 upsert 到物化集合。当新事件插入时,通过 Change Stream 触发该管道,即可保持视图持续刷新,延迟小于1秒,适合实时大屏。

db.raw_events.aggregate([
  { $match: { timestamp: { $gte: new Date(Date.now() - 60000) } } },
  { $group: { _id: '$user_id', stages: { $push: '$event' } } },
  { $project: { funnel: { $reduce: { input: '$stages', initialValue: { view:0, click:0, pay:0 }, in: { ... } } } } },
  { $merge: { into: 'funnel_mv', on: '_id', whenMatched: 'replace', whenNotMatched: 'insert' } }
]);
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 83 篇
0 完成
🔥 0