当前位置: 首页 > news >正文

【MongoDB实战】5.3 高级聚合场景实战

文章目录

  • 《MongoDB 实战入门》第5章 进阶查询:聚合管道与数据统计分析
    • 5.3 高级聚合场景实战
      • 前置准备
      • 场景1:按用户等级统计用户数量(g r o u p + group+group+match)
        • 场景需求
        • 数据准备(插入测试数据)
        • 实战聚合代码
        • 代码解析
        • 预期结果
      • 场景2:商品分类统计销量Top3( $group + $sort + $limit)
        • 场景需求
        • 数据准备(插入测试数据)
        • 实战聚合代码
        • 代码解析
        • 预期结果
      • 场景3:日志数据按小时聚合统计($bucket阶段实战)
        • 场景需求
        • 数据准备(插入测试数据)
        • 实战聚合代码
        • 代码解析
        • 预期结果
        • 扩展优化
      • 场景4:关联查询($lookup,模拟关系型数据库JOIN)
        • 场景需求
        • 数据准备(复用users集合,新增订单数据)
        • 实战聚合代码
        • 代码解析
        • 预期结果
      • 实战注意事项

《MongoDB 实战入门》第5章 进阶查询:聚合管道与数据统计分析

5.3 高级聚合场景实战

前置准备

    1. MongoDB版本:推荐5.0+(核心语法兼容低版本)
    1. 客户端:使用mongosh(替代旧版mongoshell)
    1. 核心概念:聚合管道(Aggregation Pipeline)由多个「阶段(Stage)」组成,每个阶段处理数据后传递给下一个阶段,核心阶段包括$match(筛选)、$group(分组)、$sort(排序)、$limit(限制数量)、$bucket(分桶)、$lookup(关联)。

场景1:按用户等级统计用户数量(g r o u p + group+group+match)

场景需求
  • 筛选出「状态为活跃(active)」的用户;

  • 按用户等级(level:1/2/3/4)分组,统计每个等级的用户数量;

  • 按统计数量降序排序,便于查看分布。

数据准备(插入测试数据)
// 切换到测试数据库use mongodb_practice;// 插入用户数据到users集合db.users.insertMany([{name:"张三",level:1,status:"active",registerTime:newDate("2025-01-01")},{name:"李四",level:2,status:"active",registerTime:newDate("2025-01-02")},{name:"王五",level:1,status:"inactive",registerTime:newDate("2025-01-03")},{name:"赵六",level:3,status:"active",registerTime:newDate("2025-01-04")},{name:"钱七",level:2,status:"active",registerTime:newDate("2025-01-05")},{name:"孙八",level:1,status:"active",registerTime:newDate("2025-01-06")},{name:"周九",level:4,status:"inactive",registerTime:newDate("2025-01-07")},{name:"吴十",level:2,status:"active",registerTime:newDate("2025-01-08")}]);

实战聚合代码
// 按等级统计活跃用户数量db.users.aggregate([// 阶段1:筛选活跃用户(减少后续聚合数据量,提升性能){$match:{status:"active"}},// 阶段2:按等级分组,统计数量{
http://www.zskr.cn/news/116654.html

相关文章:

  • 零基础入门EmotiVoice:新手快速上手教程
  • 获取京东商品评论数据,jd.item_reviewAPI接口指南
  • 终极version-manager完整配置指南:5步轻松管理70+开发工具
  • FindSomething信息提取插件终极指南:浏览器隐私安全完整教程
  • “微信拒绝,阿里封锁:新兴手机品牌如何面对平台巨头的联合打压?”
  • 【spring源码】从废弃的XmlBeanFactory到XmlBeanDefinitionReader
  • Cocos Creator三消游戏开发终极指南:快速构建完整消除系统
  • 高效Bandcamp下载完整指南:快速获取高品质音乐的便捷方法
  • 基于OpenCV的人脸五官识别系统研究
  • Next.js博客模板:5分钟快速搭建专业级技术博客的完整指南
  • drawio-libs图标库终极指南:打造专业级技术图表
  • SeedVR2-7B视频修复模型:低成本极速部署与智能增强解决方案
  • 解密染色质密码:TOBIAS如何让ATAC-seq数据“说话“
  • 湖南本地网安圈心照不宣的选择:当你说想“学真东西”,前辈只会指一条路
  • FastChat实战指南:3步实现高效模型优化与快速部署
  • Deforum扩展完全指南:从入门到精通Stable Diffusion动画创作
  • jenkins执行shell 找不到pm2
  • ViVeTool GUI:解锁Windows隐藏功能的图形化神器
  • Python注释:给代码“写说明书”,让程序会“说话”
  • Linux下创建线程:从入门到实践
  • 5分钟快速上手DWMBlurGlass:让你的Windows界面焕然一新
  • Python+Vue的图书馆借阅归还管理系统_ Pycharm django flask
  • 3步搞定李跳跳自定义规则:彻底告别手机弹窗的终极清净方案
  • 17、网络攻击与Apache服务器安全解析
  • Sist2搜索工具:快速构建个人知识库的终极指南
  • Flink状态监控实战:从数据倾斜到内存优化的完整解决路径
  • Headless Chrome Crawler终极指南:从零开始构建分布式爬虫系统
  • SystemInformer语言定制:从英文界面到多语言自由切换
  • SeedVR2:突破性AI视频增强技术,6GB显存实现专业级画质处理
  • 2025最新测评:SCIFIG科研绘图素材库,如何30分钟搞定“高颜值”SCI机制图