MongoDB学习总结(三) —— 常用聚合函数

  上一篇介绍了MongoDB增删改查命令的基本用法,这一篇来学习一下MongoDB的一些基本聚合函数。

  下面我们直奔主题,用简单的实例依次介绍一下。

> count() 函数

  集合的count函数是最简单的聚合函数,返回集合中文档的数量。

 

>  distinct() 函数

  用于找出一个集合中,给定键的所有不同的值。

   

  我们还可通过在数据库上运行命令,来执行distinct聚合函数,此时我们必须指定集合和键:

 

  命令参数中,键"distinct"指定统计的集合名称,键"key"指定统计的键的名称!返回一个文档,键“value”指定统计的键在该集合中的所有值!我们还可以看出,在统计时还使用了索引。

 

> group() 函数

  group聚合可以实现稍微复杂一些的操作,其执行过程为:先按照指定的键对集合中的文档进行分组,然后通过聚合每一组中的所有文档,来产生最终的结果文档。

 

 下面对student集合中的age进行group,然后对每一组文档进行处理,找出对应的name。

 

  Key: 指定要进行分组所使用的键名。

  Initial: 设置初始化值,针对分组后的每一组。

  $reduce:函数,第一个参数是当前的文档对象,第二个参数是文档循环的累加。根据所需的条件对每个分组进行聚合操作,每一组会有一个独立的累加器文档,记录聚合结果。

 

  我们还可通过在数据库上运行命令

 

  "ns":  指定集合名。

 

  以上是对集合所有记录进行分组操作,当然还可以根据某些条件来进行分组。下面我们对namejack,lucy,james的进行分组。

 

  这里我们看到通过condition条件过滤,只对名字是jack,lucy,james的文档进行分组,condition这里可以使用缩写cond或者q。

  另外我们看到还有一个参数finalize,这个参数目的是对$reduce聚合后的结果再次进行处理,最终得到所需的结果。

 

> MapReduce 函数

  MapReduce是聚合里最复杂的,也是最灵活的,count,distince,group能做到的,它都能做到。

  map:映射函数,将操作映射到集合中的每一个文档,集合会按照你指定的key进行映射分组。使用函数emit(key,value)

  reduce:化简函数,会对map分组后的数据进行分组简化,直到每个键的列表只有一个值为止,返回结果集。 

  mapReduce: 最后执行函数,参数为map,reduce。

 

  概念不好理解,看下实例就很明白了。

 

  从这个实例可以看出,map使用 使用函数emit(key,value),根据name键进行映射分组,每个键对应数组{count:1}的键值。

  然后reduce函数根据每个键所对应的键值进行相应操作。最终得到所需的结果集。

  最后mapReduce函数输出这个结果集。

 

  下面我们看看这个结果集的值。

 

 

 

  常用的聚合函数使用就介绍到这里,下一篇学习一下索引的一些基本用法。     

 

原文地址:https://www.cnblogs.com/mejoy/p/6008233.html