MongoDB教程(五):mongoDB聚合框架

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!

引言

MongoDB 的聚合框架是一个功能强大的工具,允许开发者对数据进行深度分析和处理,以生成复杂的报表或洞察数据模式。这一框架的核心概念是聚合管道,它由一系列的**阶段(stage)**组成,每个阶段执行特定的数据处理任务。本文旨在详尽解析聚合管道中的各阶段操作符,并通过具体的示例代码,帮助读者理解如何利用这些工具来解决实际问题。

MongoDB 聚合框架概览

聚合管道是一种线性的数据处理模型,其中数据流经一系列阶段,每个阶段可以修改或添加新的文档。这些阶段由聚合操作符定义,如 $match, $group, $project, $sort, $lookup, $limit 等。管道的最终结果是输出经过处理的文档集合。

聚合阶段详解

1. $match - 过滤文档

$match 阶段用于从输入文档中选择那些满足给定条件的文档。这通常用于在聚合管道的早期阶段缩小数据集。

示例
假设有一个 sales 集合,包含销售记录,每个记录有 item, quantity, 和 date 字段。我们想要找到所有在2023年之后的销售记录。

db.sales.aggregate([
    { $match: { date: { $gt: new Date("2023-01-01") } } }
]);
2. $group - 分组与聚合

$group 阶段将文档分组为共同的领域,然后执行聚合操作,如求和、平均值、最大值、最小值等。

示例
继续使用 sales 集合,如果我们想要计算每种商品的总销售额:

db.sales.aggregate([
    { $group: {
        _id: "$item",
        totalSales: { $sum: { $multiply: [ "$quantity", "$price" ] } }
    }}
]);
3. $project - 字段选择与重构

$project 阶段用于重新构造输出文档,可以用来选择字段、计算表达式或添加新字段。

示例
如果我们只关心销售记录中的商品名称和数量:

db.sales.aggregate([
    { $project: { item: 1, quantity: 1 } }
]);
4. $sort - 排序文档

$sort 阶段按指定字段对文档进行排序。

示例
为了查看最畅销的商品,我们可以按照数量降序排列:

db.sales.aggregate([
    { $group: { _id: "$item", totalQuantity: { $sum: "$quantity" } } },
    { $sort: { totalQuantity: -1 } }
]);
5. $lookup - 外部集合联接

$lookup 阶段用于从另一个集合中检索额外的信息,类似于 SQL 中的 JOIN 操作。

示例
假设有两个集合 ordersproducts,我们想要获取每个订单的商品名称:

db.orders.aggregate([
    {
        $lookup: {
            from: "products",
            localField: "product_id",
            foreignField: "_id",
            as: "product_info"
        }
    }
]);
6. $limit - 限制输出

$limit 阶段用于限制输出文档的数量。

示例
如果只需要查看前10个销售记录:

db.sales.aggregate([
    { $limit: 10 }
]);

结论

MongoDB 的聚合框架提供了一个灵活且强大的工具集,用于处理和分析大量数据。通过组合不同的阶段,开发者可以创建出能够解决各种复杂问题的管道。理解并熟练掌握这些阶段的操作符,是充分利用 MongoDB 功能的关键所在。在实际应用中,合理设计聚合管道不仅可以提高查询效率,还能为数据分析师和开发人员带来更深入的数据洞察力。


喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【MongoDB系列】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

MongoDB相关文章索引 文章链接
MongoDB教程(一):Linux系统安装mongoDB详细教程 MongoDB教程(一):Linux系统安装mongoDB详细教程
MongoDB教程(二):mongoDB引用shell MongoDB教程(二):mongoDB引用shell
MongoDB教程(三):mongoDB用户管理 MongoDB教程(三):mongoDB用户管理
MongoDB教程(四):mongoDB索引 MongoDB教程(四):mongoDB索引

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

相关推荐

  1. MongoDB【四】查询与聚合框架

    2024-07-16 21:34:02       30 阅读
  2. MongoDB聚合管道:$match

    2024-07-16 21:34:02       47 阅读
  3. MongoDB聚合:$out

    2024-07-16 21:34:02       56 阅读
  4. MongoDB聚合:$replaceRoot

    2024-07-16 21:34:02       50 阅读
  5. MongoDB聚合:$addField

    2024-07-16 21:34:02       57 阅读
  6. MongoDB聚合:$facet

    2024-07-16 21:34:02       51 阅读
  7. MongoDB聚合:$bucket

    2024-07-16 21:34:02       44 阅读
  8. MongoDB聚合:$bucketAuto

    2024-07-16 21:34:02       46 阅读
  9. MongoDB聚合:$documents

    2024-07-16 21:34:02       53 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 21:34:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 21:34:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 21:34:02       58 阅读
  4. Python语言-面向对象

    2024-07-16 21:34:02       69 阅读

热门阅读

  1. docker部署项目命令

    2024-07-16 21:34:02       20 阅读
  2. ns3-gym入门(二):linear-mesh例子详解

    2024-07-16 21:34:02       16 阅读
  3. 数据结构与算法-09贪心算法&动态规划

    2024-07-16 21:34:02       16 阅读
  4. 访问者模式(大话设计模式)C/C++版本

    2024-07-16 21:34:02       17 阅读
  5. Logstash常用的filter四大插件

    2024-07-16 21:34:02       18 阅读
  6. RTOS中断与任务的同步

    2024-07-16 21:34:02       19 阅读
  7. 哈希表(知识点+leetcode)以及字符串哈希

    2024-07-16 21:34:02       21 阅读
  8. 运维检查:mysql表自增id是否快要用完

    2024-07-16 21:34:02       19 阅读
  9. C++设计模式(装饰器模式)

    2024-07-16 21:34:02       18 阅读
  10. 哪些点权衡素材优秀与否

    2024-07-16 21:34:02       18 阅读
  11. 前端反显后端图片、上传预览图片

    2024-07-16 21:34:02       19 阅读
  12. 使用AIOHTTP模块:提高网络请求效率

    2024-07-16 21:34:02       22 阅读