工作日记2017.08.25 MongoDB 聚合查询 aggregate
2017-08-28 10:06
357 查看
官方文档:https://docs.mongodb.com/manual/reference/method/js-collection/
参考资料:
http://www.runoob.com/mongodb/mongodb-map-reduce.html
语法
aggregate() 方法的基本语法格式如下所示:
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
例子:
最基本的写法:
注意:_id后的参数,如果是一个参数,不要加大括号,如果是多个参数,务必加上大括号
mongodb提供的聚合表达式有:
管道的概念
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
管道操作符实例
1、$project实例
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
2.
3.
经过
参考资料:
http://www.runoob.com/mongodb/mongodb-map-reduce.html
语法
aggregate() 方法的基本语法格式如下所示:
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
例子:
db.getCollection('pi_wechat_message').aggregate([ { $match: {company:'gh_ebb0cb40b002',"type" : "event",'body.event':'SCAN',"created" : {$gt:ISODate("2017-08-24T01:00:00.097Z")}} }, { $group: { _id: {"eventKey":"$body.eventKey","openId":"$openId"}, total: { $sum: 1 } } }, { $sort: { total: -1 } } ]).forEach(function(a){ print(a._id.openId + "," + a._id.eventKey + "," + NumberInt(a.total)); });
最基本的写法:
db.getCollection('file').aggregate([ {$group:{_id: '$document', FanHuiMingChenSuiBianXie: { $sum: 1}}} ])
注意:_id后的参数,如果是一个参数,不要加大括号,如果是多个参数,务必加上大括号
mongodb提供的聚合表达式有:
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | `db.mycol.aggregate([{group : {_id : “by_user”, num_tutorial : {sum:“likes”}}}])` |
`$`avg | 计算平均值 | db.mycol.aggregate([{``group : {_id : “``by_user”, num_tutorial : {`‘avg:“‘`likes”}}}]) |
`$`min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{``group : {_id : “``by_user”, num_tutorial : {`‘min:“‘`likes”}}}]) |
`$`max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{``group : {_id : “``by_user”, num_tutorial : {`‘max:“‘`likes”}}}]) |
`$`push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{``group : {_id : “``by_user”, url : {`‘push:“‘`url”}}}]) |
`$`addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{``group : {_id : “``by_user”, url : {`‘addToSet:“‘`url”}}}]) |
`$`first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{``group : {_id : “``by_user”, first_url : {`‘first:“‘`url”}}}]) |
`$`last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{``group : {_id : “``by_user”, last_url : {`‘last:“‘`url”}}}]) |
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
管道操作符实例
1、$project实例
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});
2.
$match实例
db.getCollection('pi_wechat_message').aggregate([ {$match: {company:'gh_ebb0cb40b002',"type" : "event",'body.event':'SCAN',"created" : {$gt:ISODate("2017-08-24T01:00:00.097Z")}}}, { $group: { _id : "$body.eventKey", suibianxie: { $sum : 1 } } } ])
$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
3.
$skip实例
db.article.aggregate( { $skip : 5 });
经过
$skip管道操作符处理后,前五个文档被”过滤”掉。
相关文章推荐
- MongoDB高级查询(二):对一个表中的2个字段中的"内嵌对象"中的字段进行比较----------- aggregate聚合查询
- 工作日记2017.08.17 MongoDB中的日期查询命令的记录
- 利用Mongodb聚合(aggregate)来进行复杂查询的技巧
- Mongodb 2017-10-20 工作中的一个aggregate
- MongoDB中的数据聚合工具Aggregate和Group
- 在SPRING DATA MONGODB中使用聚合统计查询
- MongoDB的聚合(aggregate)
- MongoDB菜鸟入门(三):创建用户使用鉴权、使用聚合aggregate
- MongoDB高级查询[聚合Group]
- JAVA - mongodb 聚合查询二扩展
- MongoDB高级查询[聚合Group]
- MongoDB高级查询[聚合Group]
- mongodb-aggregate聚合日期分组
- mongodb 之聚合框架--aggregate
- MongoDB 聚合查询
- MongoDB聚合运算之group和aggregate聚集框架简单聚合(10)
- SQL到MongoDB的映射表(术语概率、CURD、aggregate聚合、Map-Reduce)
- 使用aggregate在MongoDB中查询重复数据记录的方法
- MongoDB聚合操作 (group, aggregate, mapReduce操作)
- MongoDB 聚合 aggregate