美文网首页数据库mongodb基础操作程序员
mongodb聚合操作之Aggregation Pipeline

mongodb聚合操作之Aggregation Pipeline

作者: 蚁族的乐土 | 来源:发表于2021-02-02 17:27 被阅读0次

    1. Aggregation Pipeline简介

     

    聚合功能可以把数据像 放入传送带一样,先把原始数据按照一定的规则进行筛选处理,然后通过多个不同的数据处理阶处理数据,最终输出一个汇总的结果

     

    Pipeline 是什么呢?英文直译为“管道”,可以形象的比喻为,将原始数据经过多条“管道”进行聚合处理,然后经过最后一道管道进行聚合处理以后,将聚合结果返回;其中每一个“管道”的处理流程,在官方文档中有一个术语,叫做Pipeline Stage,既是每一个 pipeline 阶段;MongoDB 为每一个 pipeline stage 提供了一系列的 operators 操作来完成聚合处理操作;

    使用 MongoDB Pipeline 的优势是,MongoDB 提供了许多内置的( native )的方法( 就是指这些 operators )来帮助高效的进行数据的聚合处理;

    Aggregation Pipeline 可以在分片集群上进行处理;

     

    以下是官网的一个演示Aggregation Pipline功能的过程图

     

    启动 Aggregation Pipeline,包含两个部分

    通过 db.collection.aggregate() 方法启动

    通过 aggregate 命令启动,例如:

    db.runCommand( {

       aggregate: "articles",

       pipeline: [

          { $project: { tags: 1 } },

          { $unwind: "$tags" },

          { $group: { _id: "$tags", count: { $sum : 1 } } }

       ],

       cursor: { }

    } )

    Pipeline 的执行过程由一系列的 Aggregation Stages 组成

    每一个 Stages 又可以包含多个 Pipeline Expressions 来为每个文档进行更深入的操作;该部分又分为两个部分,

    常规的 expressions

    accumulator expressions

    2. mongodb aggregate操作

     

    说明:

    计算集合中的数据的聚合值。

     

    语法:

    db.collection.aggregate(pipeline, options)

     

    参数讲解:

    pipeline:数组(Array)数据聚合操作或阶段的序列。有关详细信息,请参阅聚合管道操作符

    options:可选的。aggregate()传递给aggregate命令的其他选项。仅当您将管道指定为数组时可用。选项可以包含以下字段和值:

     

    2.1. aggregate options参数

    2.1.1. explain

     

    boolean类型,可选的。指定返回关于管道处理的信息。有关示例,请参见聚合管道操作的返回信息,在多文档事务中不可用。示例:db.orders.explain().aggregate([

       { $match: { status: "A" } },

       { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },

       { $sort: { total: -1 } }

    ])

     

    db.orders.aggregate(

                         [

                           { $match: { status: "A" } },

                           { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },

                           { $sort: { total: -1 } }

                         ],

                         {

                           explain: true

                         }

                       )

    2.1.2. allowDiskUse

     

    boolean类型,可选的。允许写入临时文件。当设置为true时,聚合操作可以将数据写入dbPath目录中的_tmp子目录。有关示例,请参见使用外部排序执行大型排序操作。从MongoDB 4.2开始,如果任何聚合阶段由于内存限制而将数据写到临时文件,则分析器日志消息和诊断日志消息包括一个usedDisk指示器。示例:

    var results = db.stocks.aggregate(

                                       [

                                         { $project : { cusip: 1, date: 1, price: 1, _id: 0 } },

                                         { $sort : { cusip : 1, date: 1 } }

                                       ],

                                       {

                                         allowDiskUse: true

                                       }

                                     )

    2.1.3. cursor

     

    可选的。指定游标的初始批处理大小。游标字段的值是一个字段batchSize的文档。有关语法和示例,请参见指定初始批处理大小。示例:cursor: { batchSize: <int> }

    2.1.4. maxTimeMs

     

    可选的。指定处理游标操作的时间限制(以毫秒为单位)。如果没有为maxTimeMS指定值,操作将不会超时。值0显式指定默认的无限制行为。MongoDB使用与db.killOp()相同的机制终止超过分配时间限制的操作。MongoDB只在一个指定的中断点终止一个操作。

    2.1.5. bypassDocumentValidation

     

    可选的。仅当指定$out或$merge聚合阶段时才适用。使db.collection.aggregate以绕过操作期间的文档验证。这允许插入不满足验证要求的文档。

    2.1.6. readConcern

     

    可选的。指定读取关系。

    2.1.7. collation

     

    可选的。指定操作要使用的排序规则。

    2.1.8. hint

     

    可选的。用于聚合的索引。索引位于对其运行聚合的初始集合/视图上。通过索引名称或索引规范文档指定索引。

    2.1.9. comment

     

    可选的。用户可以指定任意字符串来帮助通过数据库分析器、currentOp和日志跟踪操作。通过索引名称或索引规范文档指定索引。

    2.1.10. writeConcern

     

    可选的。表示要与$out或$merge阶段一起使用的写关注点的文档。通过索引名称或索引规范文档指定索引。忽略对$out或$merge阶段使用默认的写入关注。

    相关文章

      网友评论

        本文标题:mongodb聚合操作之Aggregation Pipeline

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