MongoDB进阶之查询(二)

通过前面几章的学习,MongoDB的常规操作已经差不多了,今天主要讲解MongoDB查询中的聚合函数及管道应用示例,仅供学习分享使用,如有不足之处,还请指正。

聚合函数

聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。

MongoDB中聚合的方法使用aggregate()。

语法:db.集合名.aggregate(AGGREGATE_OPERATION);

下表展示了一些聚合的表达式:

管道

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

聚合框架中常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。

聚合语法

聚合表达式语法,如下所示:

1 db.集合名.aggregate([
2     {
3         管道:{聚合表达式}
4     }
5 ]);

注意:聚合函数套路:从外到里依次是小括号,中括号,大括号。

group,sort示例

示例1 :统计男生女生的平均年龄

 

 示例2:统计男生女生的最大年龄,最小年龄,如下所示:

 

 示例3:统计男生女生的人数,如下所示:

 注意:$sum:1===count(*)

 

示例4:不分组求汇总,_id:null 就表示不分组。

 

示例5:求每一个系的人数,并升序排列,如下所示:

注意:各个管道之间是相互平级的,不能嵌套。

 

示例6:多个分组条件,查询每一个系的男生,女生的人数,如下所示:

 查询集合文档数量

如果只是按照某些条件查询数量,不进行分组,则可以采用count函数。

语法:db.集合名称.count();

查询集合文档数量,如下所示:

1 //查询总文档数量
2 db.student.count();
3 //查询男生数量
4 db.student.count({sex:"Male"});

 

match,skip示例

示例1:查询年龄大于等于20,且只显示前两个,如下所示:

 注意:管道的执行顺序,是从上到下,如果顺序改变,则执行结果会不同。

 

示例2:查询2条数据,并跳过一条,如下所示:

 

 示例3:先跳过一条,再查询前两条数据,如下所示:

 

 示例4:统计男生的最大年龄,最小年龄,平均年龄

 

project示例

释义:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。

示例1:查询文档中两个属性,如下所示:

 备注

卜算子·我住长江头

【作者】李之仪 【朝代】宋
 

我住长江头,君住长江尾。日日思君不见君,共饮长江水。

此水几时休,此恨何时已。只愿君心似我心,定不负相思意。

posted @ 2021-10-06 00:07  老码识途呀  阅读(465)  评论(0编辑  收藏  举报