使用MongoDB中Aggregation统计数据
来源:互联网 发布:西安网络推广公司 编辑:程序博客网 时间:2024/05/17 06:17
聚合管道(Aggregation Pipeline)
定义
聚合管道是MongoDB提供的一种数据统计框架。通过Aggregation操作,能够实现类似于SQL 中Group By操作的功能。
由于之前MongoDB中实现聚合操作需使用相对复杂的MapReduce,而聚合管道拥有固定的操作符表达, 使用更为简单。因此,聚合管道能够成为MapReduce的一种替代方案。
工作方式
聚合管道由多个节点组成,这些节点用管道操作符来进行表示。每个节点有自己特殊的功能(分组、过滤等)。
文档从一个操作节点 流向下一个节点 ,每个操作节点对文档做相应的操作,最后输出相应的结果。
功能
管道基本的功能有两个:一是对文档进行“过滤”,也就是筛选出符合条件的文档;二是对文档进行“变换”,也就是改变文档的输出形式。
其他的一些功能还包括按照某个指定的字段分组和排序等。而且在每个阶段还可以使用表达式操作符计算平均和拼接字符串等相关操作
聚合框架操作符(Aggregation Framework Operator)
管道操作符
管道表达式
管道操作符作为“键”,所对应的“值”叫做管道表达式。
例如{$match:{status:"A"}},$match称为管道操作符,而status:"A"称为管道表达式,是管道操作符的操作数(Operand)。
每个管道表达式是一个文档结构,它是由字段名、字段值、和一些表达式操作符组成的。
小于给定值$eq等于给定值
更详尽的内容,可以参见MongoDB官方文档
Aggregation的使用
任务:某游戏(gkey)的忠诚用户用户(即某周登陆N天以上)数量。cnt字段表示用户登陆次数。
php代码
$match = array('$match'=>array( 'cnt' =>array('$gt'=>($this->data['loginTimes'])), 'year' =>(int)$YMD['year'], 'month' =>(int)$YMD['month'], 'day' =>(int)$YMD['day']));$group = array('$group'=>array( "_id" =>array("gkey"=>'$gkey'),"count" =>array('$sum'=>1))); $newPlayers = $collection->aggregate(array($match, $group));
解释:$match指定过滤条件。'cnt'=>array('$gt'=>$this->data['loginTimes']表示登陆次数应大于指定次数。'year'=>$YMD['year']等表示文档的时间字段必须与指定的一致。
$group指定组合条件。将满足$match条件且gkey相同的文档组合在一起。"count"=>array('$sum'=>1)表示将count字段的值设为gkey相同文档的数量。
注意事项:
- aggregate中对管道操作符按顺序执行,即可以先group,再对group的结果match。(流水线)
- $match尽量出现在管道的前面,这样可以提早过滤文档,加快聚合速度
- $group的时候必须要指定一个_id域
- 尽早使用$project投影,去掉不用的字段,可以大大减少内存
聚合框架的限制
类型限制
在管道内不能操作 Symbol, MinKey, MaxKey, DBRef, Code, CodeWScope类型的数据
结果大小限制
管道线的输出结果不能超过BSON 文档的大小(16M),如果超出的话会产生错误。
内存限制
如果一个管道操作符在执行的过程中所占内存超过系统内存容量的10%的时候,会产生一个错误。
当$sort和$group操作符执行的时候,整个输入都会被加载到内存中,如果这些占有内存超过系统内存的%5的时候,会将一个warning记录到日志文件。
- 使用MongoDB中Aggregation统计数据
- MongoDB中强大的统计框架Aggregation使用实例解析
- mongodb中的aggregation的使用
- 使用mongodb的js来统计数据
- spring-data-mongodb-1.9.x中Aggregation关于Conditional Aggregation Operators的坑
- Mongodb Aggregation Framework
- mongodb aggregation 聚合
- MongoDB Aggregation Pipeline
- MongoDB聚合操作Aggregation
- MongoDB Aggregation 聚合管道(Aggregation Pipeline)
- MongoDB Aggregation II: Grouping Elaborated
- java MongoDB 聚合查询aggregation
- MongoDB学习笔记 - Aggregation (1)
- MongoDB Aggregation, mongoDB的聚合操作
- Mysql 中使用DATE_FORMAT函数按月、周统计数据
- Mysql 中使用DATE_FORMAT函数按月、周统计数据
- Mysql 中使用DATE_FORMAT函数按月、周统计数据
- Mysql 中使用DATE_FORMAT函数按月、周统计数据
- ZeroMQ(java)Socket之Req
- msyql 中文读写utf8编码及连接超时设置
- $(@:_config=)什么意思?
- JPA--双向多对多
- linux解压 tar命令
- 使用MongoDB中Aggregation统计数据
- uva104(好)
- 深入了解Windows句柄到底是什么
- 我的GitHub Page主页
- UI_iOS学习_UITextField_UILabel_UIButton
- zookeeper-3.4.6 安装配置
- 重写字符串类吧
- JSON.stringify 语法讲解
- win7下安装Mysql 服务