首页 > 代码库 > MongoDB学习总结(三) —— 常用聚合函数

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

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

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

 

1.count()函数

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

技术分享

2.distinct()函数

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

技术分享 

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

技术分享

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

 

3.group()函数

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

 

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

技术分享

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

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

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

 

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

技术分享

"ns":  指定集合名。

 

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

技术分享

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

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

 

4.MapReduce函数

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

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

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

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

 

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

技术分享

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

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

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

 

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

技术分享

 

 

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

 

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