zoukankan      html  css  js  c++  java
  • MongoDB 的聚集操作

    聚合引言

    聚集操作就是出来数据记录并返回计算结果的操作。MongoDB提供了丰富的聚集操作。可以检測和执行数据集上的计算。执行在mongod上的数据聚集简化了代码和资源限制。

    像查询一样,在Mongo的聚合操作使用collections作为输入,并返回一个或多个document作为输出。

    聚合模式

    • 聚合管道

    MongoDB2.2引入了一个新的聚合框架:聚合管道,这是基于数据处理管道概念的模型。文档输入一个多阶段的管道并将文档转化为一个聚合的结果。

    最主要的管道阶段提供了过滤器(Filters)来像查询一样操作。和文档转化(Document transformations)来改动输出文档的形式。

    其它的管道提供了对特定字段分组和排序的工具,也有聚合数组内容的工具。而且,管道阶段能对任务使用操作符。比方计算平均值或连接一个字符串。

    管道使用MongoDB原生的操作提供了有效的数据聚合,也是MongoDB里面一个理想的数据聚合方法。


    上面带有凝视的聚合操作管道操作,这个聚合管道有两个阶段: $match和$group


    • Map-Reduce

    MongoDB也提供了map-reduce操作来运行聚合操作。一般的,map-reduce操作有两个阶段:Map阶段来处理每一个文档并为每一个输入文档输出一个或多个文档,Reduce阶段整合map操作的输出。Map-reduce有一个可选的finalize阶段,来为结果做终于的改动。

    和其它聚合操作一样,map-reduce指出了查询条件来选择输入文档并排序和限制结果。

    Map-reduce使用自己定义的javasript函数来运行map和reduce操作,以及可选的finalize操作。尽管自己定义的javasript相对聚合管道提供了更大的灵活性,但一般map-reduce相对低效和复杂。

    而且。map-reduce操作的输出集合比集合管道的输出极限大16M。

    注:

    从MongoDB2.4開始,特定的mongo shell函数和属性不能被map-reduce操作使用。MongoDB2.4也提供了同一时候运行多个Javascript操作的支持。在MongoDB2.4之前,javascript代码仅仅能在单线程运行。这为map-reduce的并行带来困难。




    • 单一目的的聚合操作

    对非常多的常规单一目的的聚合操作(single purpose aggregation operation),MongoDB提供了特殊目的的数据库命令。这些常规的聚合操作是:返回匹配文档的数量,返回一个字段的唯一的值,和基于一个字段值的分组。全部这些操作都是来自一个collection。尽管这些操作提供了简单的常规聚合操作处理方法。但他们都缺乏灵活性和像聚合管道、Map-reduce那样的能力。




  • 相关阅读:
    判断窗体 show完成
    【洛谷1349】广义斐波那契数列
    【洛谷2744 】【CJOJ1804】[USACO5.3]量取牛奶Milk Measuring
    【洛谷T7153】(考试) 中位数
    【洛谷T7152】(考试题目)细胞
    【洛谷1962】 斐波那契数列
    【洛谷1855】 榨取kkksc03
    【HDU2255】奔小康赚大钱
    【洛谷1402】酒店之王
    【洛谷1607】【USACO09FEB】庙会班车
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6771079.html
Copyright © 2011-2022 走看看