通过前面几章的学习,MongoDB的常规操作已经差不多了,今天主要讲解MongoDB查询中的聚合函数及管道应用示例,仅供学习分享使用,如有不足之处,还请指正。
聚合函数
聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。
MongoDB中聚合的方法使用aggregate()。
语法:db.集合名.aggregate(AGGREGATE_OPERATION);
下表展示了一些聚合的表达式:
管道
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
聚合框架中常用的几个操作:
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
- $geoNear:输出接近某一地理位置的有序文档。
聚合语法
聚合表达式语法,如下所示:
db.集合名.aggregate([ { 管道:{聚合表达式} } ]);
注意:聚合函数套路:从外到里依次是小括号,中括号,大括号。
group,sort示例
示例1 :统计男生女生的平均年龄
示例2:统计男生女生的最大年龄,最小年龄,如下所示:
示例3:统计男生女生的人数,如下所示:
注意:$sum:1===count(*)
示例4:不分组求汇总,_id:null 就表示不分组。
示例5:求每一个系的人数,并升序排列,如下所示:
注意:各个管道之间是相互平级的,不能嵌套。
示例6:多个分组条件,查询每一个系的男生,女生的人数,如下所示:
查询集合文档数量
如果只是按照某些条件查询数量,不进行分组,则可以采用count函数。
语法:db.集合名称.count();
查询集合文档数量,如下所示:
match,skip示例
示例1:查询年龄大于等于20,且只显示前两个,如下所示:
注意:管道的执行顺序,是从上到下,如果顺序改变,则执行结果会不同。
示例2:查询2条数据,并跳过一条,如下所示:
示例3:先跳过一条,再查询前两条数据,如下所示:
示例4:统计男生的最大年龄,最小年龄,平均年龄
project示例
释义:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
示例1:查询文档中两个属性,如下所示:
备注
卜算子·我住长江头
【作者】李之仪 【朝代】宋
我住长江头,君住长江尾。日日思君不见君,共饮长江水。
此水几时休,此恨何时已。只愿君心似我心,定不负相思意。