设为首页 收藏本站
查看: 1049|回复: 0

[经验分享] 【MongoDB学习笔记30】MongoDB的聚合框架

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-1-15 09:01:06 | 显示全部楼层 |阅读模式
使用聚合框架可以对集合中的文档进行变换和组合。用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理。这些构件包括:
筛选(filtering)
投射(projecting)
分组(grouping)
排序(sorting)
限制(limiting)
跳过(skipping)

在MongoDB中实际的集合框架,需要将这些操作传给aggregate函数,例如:
(1)将文档的name字段投射出来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
> db.post.aggregate({$project:{"name":1}})   
{ "_id" : ObjectId("54a530c3ff0df3732bac1681"), "name" : "joe" }   
{ "_id" : ObjectId("54a530c3ff0df3732bac1680"), "name" : "joe" }   
{ "_id" : ObjectId("54a9700e1b5afd45354fd086") }   
{ "_id" : ObjectId("54a9701c1b5afd45354fd087") }   
{ "_id" : ObjectId("54a970281b5afd45354fd088") }   
{ "_id" : ObjectId("54a970351b5afd45354fd089") }   
{ "_id" : ObjectId("54a970781b5afd45354fd08a") }   
{ "_id" : ObjectId("54a970831b5afd45354fd08b") }   
{ "_id" : ObjectId("54a970901b5afd45354fd08c") }   
{ "_id" : ObjectId("54a9709c1b5afd45354fd08d") }   
{ "_id" : ObjectId("54aa8a90652d8bdfa0566d34") }   
{ "_id" : ObjectId("54aa97b894dcf31069b590ca") }   
{ "_id" : ObjectId("54aa97d794dcf31069b590cb") }   
{ "_id" : ObjectId("54aa97f294dcf31069b590cc") }   
{ "_id" : ObjectId("54aff7f43bd1048e7b585e39") }   
> db.post.aggregate({$project:{"name":1,"_id":0}})   
{ "name" : "joe" }   
{ "name" : "joe" }



  可以看的出了find的用法类似;

(2)以name字段的值对其分组并计算其个数   

1
2
3
4
> db.post.aggregate({$group:{"_id":"$name","count":{$sum:1}}})   
{ "_id" : null, "count" : 13 }   
{ "_id" : "joe", "count" : 2 }   
>



   
(3)对结果集进行降序排列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> db.post.aggregate({$sort:{"id":-1}})   
{ "_id" : ObjectId("54aa97d794dcf31069b590cb"), "id" : 13, "fruit" : [ "apple", "kumquat", "orange", "fruit01" ] }   
{ "_id" : ObjectId("54aa97b894dcf31069b590ca"), "id" : 12, "fruit" : [ "apple", "banana", "peach" ] }   
{ "_id" : ObjectId("54aa8a90652d8bdfa0566d34"), "id" : 11, "test10" : 11 }   
{ "_id" : ObjectId("54a9709c1b5afd45354fd08d"), "id" : 10, "test10" : 10 }   
{ "_id" : ObjectId("54a970901b5afd45354fd08c"), "id" : 9, "test9" : 9 }   
{ "_id" : ObjectId("54a970831b5afd45354fd08b"), "id" : 8, "test8" : 8 }   
{ "_id" : ObjectId("54a970781b5afd45354fd08a"), "id" : 7, "test7" : 7 }   
{ "_id" : ObjectId("54a970351b5afd45354fd089"), "id" : 6, "test6" : 6 }   
{ "_id" : ObjectId("54a970281b5afd45354fd088"), "id" : 5, "test5" : 5 }   
{ "_id" : ObjectId("54a9701c1b5afd45354fd087"), "id" : 4, "test4" : 4 }   
{ "_id" : ObjectId("54a9700e1b5afd45354fd086"), "id" : 3, "test3" : 3 }   
{ "_id" : ObjectId("54a530c3ff0df3732bac1681"), "id" : 2, "name" : "joe", "age" : 30, "sex" : 1, "school" : "marry" }   
{ "_id" : ObjectId("54a530c3ff0df3732bac1680"), "id" : 1, "name" : "joe", "age" : 30, "comments" : [ "test2", "test9", "test5" ], "sex" : 1, "school" : "marry" }   
{ "_id" : ObjectId("54aa97f294dcf31069b590cc"), "push" : { "fruit" : "fruit01" } }   
{ "_id" : ObjectId("54aff7f43bd1048e7b585e39"), "username" : "sid", "loc" : { "ip" : "1.2.3.4", "city" : "springfield", "state" : "ny" } }   
>




(4)限制显示排序后的前5个结果
1
2
3
4
5
6
7
> db.post.aggregate({$sort:{"id":-1}},{$limit:5})   
{ "_id" : ObjectId("54aa97d794dcf31069b590cb"), "id" : 13, "fruit" : [ "apple", "kumquat", "orange", "fruit01" ] }   
{ "_id" : ObjectId("54aa97b894dcf31069b590ca"), "id" : 12, "fruit" : [ "apple", "banana", "peach" ] }   
{ "_id" : ObjectId("54aa8a90652d8bdfa0566d34"), "id" : 11, "test10" : 11 }   
{ "_id" : ObjectId("54a9709c1b5afd45354fd08d"), "id" : 10, "test10" : 10 }   
{ "_id" : ObjectId("54a970901b5afd45354fd08c"), "id" : 9, "test9" : 9 }   
>




聚合框架类似关系行数据库中的select,不会对集合进行写入操作,结果只会返回给客户端。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-40854-1-1.html 上篇帖子: mongodb 用户密码认证 下篇帖子: mongodb 索引相关
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表