题记:
还有3天2014年结束了,这个月的计划除了总结Mongodb外其他计划都已经完成了。最近由于懒惰对于mongodb的研究暂停了好长时间。在最后的三天里,对于mongodb的研究做以总结和梳理;
一、基本概念
对于聚合框架,我在官方文档(http://docs.mongodb.org/manual/core/aggregation-introduction/)找到对它的介绍。翻译大概意思如下:
聚合是处理数据记录并且返回计算结果的操作。mongodb提供了一组强大针对数据集合进行检查和计算的聚合操作。在mongod实例中运行数据聚合可以简化应用程序代码,约束资源需求;和查询一样,在mongodb中聚合操作把文档的集合作为输入参数,以一个或者多个文档的形式返回结果。
在mongodb中使用聚合框架可以对集合中的文档进行变换和组合。基本上用多个构建创建一个管道(pipeline),用于对一连串的文档进行处理。这些构建包含筛选(filtering),投射(projecting),分组(grouping),排序(sorting),限制(limiting)和跳过(skipping).
以下是官方文档中的实例图:
二、基本操作符
比如有一个保存杂志文章的集合。你可能希望找出发表文章最多哪个作者、 假设每篇文章中被保存为MongoDB的一个文档,可以按照如下步骤创建管道。
1. 将每个文章文档中的作者投射出来
2. 将作者按照名字排序,统计每个名字出现的次数
3. 将作者按照名字出现的次数降序排列
4. 将返回结果限制为前五个
对于操作符号实例:
1. {‘$project’:{‘auther‘:1}} 这样可以把‘author’从每个文档中投射出来;执行结果后该文档会存在{‘id’:id,‘author‘:author}
2. {‘$group‘:{‘Id:‘‘$author‘,‘count‘:{‘$sum‘:1}}} 这样就会将作者按照名字排序,某个作者名字每出现一次,就会对每个作者的count加一。
执行该步骤后,结果集合中的每个文档就是这样的结构:{"_id": "authorName","count": articleCount}
3. {"$sort": {"count":-1}} 这个操作会对结果集合中的文档根据“count”字段进行降序排列
4. {"$limit":5} 这个结果的显示为当前结果的前五个文档。
其他的操符号:http://docs.mongodb.org/manual/reference/operator/aggregation-pipeline