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

【MongoDB实战】5.2 常用聚合阶段实战

文章目录

  • 《MongoDB实战入门》第5章 进阶查询:聚合管道与数据统计分析
    • 5.2 常用聚合阶段实战
      • 前置回顾:测试数据集结构
      • 5.2.1 $match:筛选数据(管道的“前置过滤器”)
        • 核心作用
        • 语法格式
        • 实战案例
        • 关键注意事项
      • 5.2.2 $project:字段投影与重命名
        • 核心作用
        • 语法格式
        • 实战案例
        • 关键注意事项
      • 5.2.3 $group:分组统计(聚合计算核心)
        • 核心作用
        • 语法格式
        • 实战案例
        • `关键注意事项`
      • 5.2.4 $sort:排序聚合结果
        • 核心作用
        • 语法格式
        • 实战案例
        • `关键注意事项`
      • 5.2.5 $limit / $skip:聚合结果分页
        • 核心作用
        • 语法格式
        • 实战案例
        • 关键注意事项
      • 5.2.6 综合实战:多阶段组合实现复杂统计
        • 步骤拆解
        • 实战代码
        • 执行结果
      • 5.2.7 核心总结

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

5.2 常用聚合阶段实战

  • 聚合管道的核心价值在于通过不同阶段的组合实现复杂数据处理。
  • 本节聚焦最常用的聚合阶段($match$project$group$sort$limit/$skip),结合电商订单场景拆解每个阶段的核心用法、语法要点与实战代码,所有案例均基于5.1节创建的orders集合。
    • 若未创建,需先执行5.1节的“前置准备:创建测试数据集”代码。

前置回顾:测试数据集结构

// 快速查看订单集合结构db.orders.findOne();

5.2.1 $match:筛选数据(管道的“前置过滤器”)

核心作用
  • 作为聚合管道的起始阶段(最优实践),筛选符合条件的文档,减少后续阶段需要处理的数据量,是聚合管道性能优化的关键。
  • 其查询条件语法与find()完全一致,但仅用于筛选文档(而非投影字段)。
语法格式
{$match:{<查询条件>}}
实战案例
  • 需求1:筛选“已支付”且订单金额大于1000元的订单
// 仅筛选,不做后续处理db.orders.aggregate([{$match:{status:"已支付",// 等值匹配amount:{$gt:1000}// 金额>1000}}]);

  • 需求2:筛选2025年1月2日创建的所有订单
db.orders.aggregate([{$match:{create_time:{$gte:ISODate("2025-01-02T00:00:00Z"),$lte:ISODate("2025-01-02T23:59:59Z")}}}]);

关键注意事项
  • $match应尽可能放在管道起始位置,先过滤再计算;

  • 支持所有find()的查询操作符($eq$gt$in$and等),例如:{ $match: { category: { $in: ["电子产品", "服装"] } } }

5.2.2 $project:字段投影与重命名

核心作用

控制文档的字段显示/隐藏、重命名字段、新增计算字段,重塑文档结构,是聚合管道中“调整输出格式”的核心阶段。

语法格式
{$project:{<字段1>:1/0,// 1=显示,0=隐藏(_id默认显示,需设为0隐藏)<新字段名>:"$原字段名",// 重命名字段<计算字段>:<表达式>// 新增基于原字段的计算字段}}
实战案例
  • 需求1:仅显示订单ID、商品分类、订单金额,并重命名amount订单金额,隐藏_id
db.orders.aggregate([{$match:{status:"已支付"}},// 先筛选{$pr
http://www.cnnetsun.cn/news/108702.html

相关文章:

  • 如何集成Camoufox与CapSolver实现无缝CAPTCHA解决
  • 批量修改指定路径下的文件名
  • AI训练场景下的革命性存储解决方案:突破性分布式系统架构全解析
  • RuoYi-Cloud-Plus SSE实时推送:企业级消息通信终极指南
  • 让智能家居“听懂人话”:我用4B模型+万条数据,教会了它理解复杂指令
  • ShawzinBot:Warframe音乐创作的全新革命
  • 超简单破解在市面上的流水灯,学会后你也可以在家里制作
  • 用Python调用EmotiVoice:语音合成脚本编写示例
  • 传统灯光控制软件不够用?QLC+带你突破舞台灯光设计瓶颈
  • 视觉语言导航实战:让AI听懂你的每一个指令
  • Python+Vue的志愿者招募管理系统 Pycharm django flask
  • 33、网络服务与安全技术解析
  • NarratoAI:零基础也能制作专业视频解说的AI神器
  • RQ任务日志管理:从混乱到有序的实战指南
  • Navicat x 达梦技术指引 | 模型设计
  • CAPL学习-SOME/IP交互层-值处理类函数1
  • AI HOME智能体:当存储遇上智能体,开启数据管理新纪元​
  • SystemInformer语言定制:从英文界面到多语言自由切换
  • 事件驱动架构中的消息可靠性:Watermill与RabbitMQ实战深度解析
  • Python+Vue的瑜伽体验课预约系统 Pycharm django flask
  • 彻底解决Git跨平台开发难题:专业.gitattributes模板集合
  • DAIR-V2X车路协同自动驾驶完全实战指南:从零搭建多模态感知系统
  • 腾讯混元视频生成模型完整技术解析
  • 突破传统瓶颈:如何用LightGlue实现图像特征匹配的极致性能
  • 5天从零掌握开源音乐合成:OpenUtau实战创作全流程
  • UniApp页面跳转后关闭原页面的完整指南:让应用流畅如丝
  • 政策 + 技术双驱动!安科瑞赋能农村能源革命,助力乡村振兴落地生根
  • 快捷键一键粘贴常用短语,复制粘贴告别Ctrl+C/V,打工人必备提高效率神器!
  • GifCapture:Mac端高效Gif录制工具完整指南
  • Pearcleaner Homebrew管理全攻略:告别繁琐命令行操作