baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • mysql

  • redis

  • MongoDB

    • mongo基本概念
    • mongo mac安装使用homebrew
    • mongoDB安装
    • 本地连接虚拟机时出现连接不上的原因
    • 基本操作CURD
    • 索引和聚合
    • mongo中的聚合管道
      • 黑马mongoDb
    • 后端存储实战

    • 数据库
    • MongoDB
    xugaoyi
    2023-08-22
    目录

    mongo中的聚合管道

    # 什么是聚合管道

    在MongoDB中,聚合管道(Aggregation Pipeline)是一种功能强大的数据处理工具,它允许您根据一系列的阶段(stage)对数据进行处理和转换。聚合管道可以用于执行复杂的数据聚合、分组、筛选、排序和转换操作。

    聚合管道由多个阶段组成,每个阶段都会接收输入数据,并将其输出传递到下一个阶段。这些阶段可以按照需要进行排序和组合,以完成所需的数据处理任务。

    # 使用

    # 语法结构

    db.collection.aggregate([
      // 阶段 1
      { <操作符>: <表达式> },
      
      // 阶段 2
      { <操作符>: <表达式> },
      
      // ...
      
      // 阶段 N
      { <操作符>: <表达式> }
    ])
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

    每个阶段处理完后,会将数据传递给下一个阶段。

    # 常见的操作符

    下面是常用的操作符和表达式,用于构建聚合管道:

    1. $match:用于筛选满足指定条件的文档。表达式可以使用各种比较运算符、逻辑运算符和正则表达式等。
    { $match: { <条件表达式> } }
    
    1
    1. $group:根据指定的字段对文档进行分组,并计算每个分组的聚合结果。可以使用聚合运算符和系统变量对文档进行计算。
    { $group: { _id: <分组字段>, <聚合字段>: { <聚合运算符>: <表达式> } } }
    
    1
    1. $project:指定输出文档中包含的字段,以及对字段进行重命名、计算和组合等操作。
    { $project: { <字段1>: <表达式>, <字段2>: <表达式>, ... } }
    
    1
    1. $sort:根据指定字段对文档进行排序。
    { $sort: { <字段>: <排序方式> } }
    
    1
    1. $skip:跳过指定数量的文档。
    { $skip: <数量> }
    
    1
    1. $limit:限制输出文档的数量。
    { $limit: <数量> }
    
    1
    1. $unwind:将包含数组的字段拆分为多个文档。
    { $unwind: <字段> }
    
    1
    1. $lookup:在不同的集合之间执行类似于关联操作的查找。
    { $lookup: { from: <目标集合>, localField: <本地字段>, foreignField: <外部字段>, as: <结果别名> } }
    
    1

    以上是一些常用的聚合管道操作符和表达式,您可以根据具体的需求在聚合管道中组合使用它们。请注意,聚合管道可以包含任意数量的阶段,并且阶段的顺序非常重要,因为每个阶段的输出将作为下一个阶段的

    # $group详细讲解

    推荐参考:https://blog.csdn.net/qq_18948359/article/details/88777066 (opens new window)

    语法

    {
      $group: {
        _id: <分组字段>,
        <聚合字段>: { <聚合运算符>: <表达式> },
        ...
      }
    }
    
    1
    2
    3
    4
    5
    6
    7

    _id:表示你要进行聚合的字段,如果你要对整张表进行聚合,则可以填写为null。

    对于:<聚合字段>: { <聚合运算符>: <表达式> }

    聚合字段,对外显示的字段

    聚合运算符,例如sum,min这些

    表达式,聚合的具体字段

    例如:

    db.orders.aggregate([
      {
        $group: {
          _id: "$customer",
          totalAmount: { $sum: "$totalAmount" }
        }
      }
    ])
    
    1
    2
    3
    4
    5
    6
    7
    8

    如果想要看整张表的sum。即将整个表看做一个分组,就可以这样:

    db.orders.aggregate([
      {
        $group: {
          _id: null,
          totalAmount: { $sum: "$totalAmount" }
        }
      }
    ])
    
    1
    2
    3
    4
    5
    6
    7
    8
    编辑 (opens new window)
    上次更新: 2024/02/22, 14:03:19
    索引和聚合
    黑马mongoDb

    ← 索引和聚合 黑马mongoDb→

    最近更新
    01
    spark基础
    02-22
    02
    mysql读写分离和分库分表
    02-22
    03
    数据库迁移
    02-22
    更多文章>
    Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式