【MongoDB学习笔记30】MongoDB的聚合框架
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,使用聚合框架可以对集合中的文档进行变换和组合。用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理。这些构件包括:筛选(filtering)投射(projecting)分组(grou
千家信息网最后更新 2025年01月21日【MongoDB学习笔记30】MongoDB的聚合框架
使用聚合框架可以对集合中的文档进行变换和组合。用多个构件创建一个管道(pipeline),用于对一连串的文档进行处理。这些构件包括:
筛选(filtering)
投射(projecting)
分组(grouping)
排序(sorting)
限制(limiting)
跳过(skipping)
在MongoDB中实际的集合框架,需要将这些操作传给aggregate函数,例如:
(1)将文档的name字段投射出来
> 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字段的值对其分组并计算其个数
> db.post.aggregate({$group:{"_id":"$name","count":{$sum:1}}}) { "_id" : null, "count" : 13 } { "_id" : "joe", "count" : 2 } >
(3)对结果集进行降序排列
> 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个结果
> 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,不会对集合进行写入操作,结果只会返回给客户端。
框架
文档
结果
字段
构件
分组
排序
限制
一连串
个数
函数
多个
实际
客户
客户端
数据
数据库
管道
变换
处理
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
发件服务器
青山定制软件开发公司
山东淄博软件开发有限公司
数据库中扩展字段取名
江南模式软件开发
网络安全学java吗
软件开发初入教程
数据库账号密码查询语句
上市网络安全公司
上海软件开发大概多少价格
无代码软件开发图片
软件开发工程师的目标职业
jsp连接sql数据库
软件开发需要多少资金用途如何写
服务 好的软件开发外包
工厂需要软件开发工程师吗
当你在服务器里有很多钻石时
服务器java环境安装
人脸识别打卡系统服务器创建
金三税系统服务器地址
pdm修改数据库类型6
无锡软件开发产业化
西藏城管通软件开发系统
杭州莱凡网络技术有限公司
服务器崩溃了三次
提高软件开发效率的框架
软件开发公司经营技巧
奇迹mu游戏服务器多少钱
数据库双机热备份和冷备份
squid 缓存服务器