美文网首页
MongoDB聚合管道(转)

MongoDB聚合管道(转)

作者: 岑吾 | 来源:发表于2022-01-29 08:48 被阅读0次

    前言:一般查询可以通过find方法,但如果是比较复杂的查询或者数据统计的话,find可能就无能为力了,这时也许你需要的是aggregate.

    什么是聚合管道(aggregation pipeline)

    英文文档中是aggregation pipeline,直译为聚合管道,它可以对数据文档进行变换和组合。聚合管道是基于数据流概念,数据进入管道经过一个或多个stage,每个stage对数据进行操作(筛选,投射,分组,排序,限制或跳过)后输出最终结果。

    官方示例

    示例来源:https://docs.mongodb.com/manual/core/aggregation-pipeline/

    解释
    • orders是一个文档集合

    • aggregate是聚合方法,参数是数组,每个数组元素的就是一个stage,对数据进行处理,处理完流到下一个stage

    • $match是匹配操作符,筛选出status是A的文档

    • $group是分组操作符,以cust_id为分组条件,相同的cust_id分为同组

    • sum是算术操作符,{sum: '$amount' }表示分组后,计算amount的总和。

    管道操作符介绍

    mongoDB中有许多操作符,在aggregate中每个stage可以使用的操作符叫做管道操作符,以下列举比较常用的管道操作符:

    操作符 简述
    $project 投射操作符,用于重构每一个文档的字段,可以提取字段,重命名字段,甚至可以对原有字段进行操作后新增字段
    $match 匹配操作符,用于对文档集合进行筛选
    $group 分组操作符,用于对文档集合进行分组
    $unwind 拆分操作符,用于将数组中的每一个值拆分为单独的文档
    $sort 排序操作符,用于根据一个或多个字段对文档进行排序
    $limit 限制操作符,用于限制返回文档的数量
    $skip 跳过操作符,用于跳过指定数量的文档
    $lookup 连接操作符,用于连接同一个数据库中另一个集合,并获取指定的文档,类似于populate
    $count 统计操作符,用于统计文档的数量

    更多操作符介绍详见官网:https://docs.mongodb.com/manual/reference/operator/aggregation/

    操作符先简单介绍一下,因为里面还可以大有文章,留在下一篇。

    管道操作符的分类

    管道操作符可以分为三类:

    1. 阶段操作符(Stage Operators)

    2. 表达式操作符(Expression Operators)

    3. 累加器(Accumulators)

    小结

    db.collection.aggregate([])是聚合管道查询使用的方法,参数是数组,每个数组元素就是一个stage,stage中运用操作符对数据进行处理后再交由下一个stage,直到没有下个stage,就输出最终的结果,而数据的处理则是通过使用操作符,本文先简单介绍了一下有哪些常用的操作符,下一篇再详细说明。

    本文转自:https://segmentfault.com/a/1190000010618355

    相关文章

      网友评论

          本文标题:MongoDB聚合管道(转)

          本文链接:https://www.haomeiwen.com/subject/nmrrhrtx.html