news 2026/9/3 17:20:36

头歌实践教学平台:大数据存储2023(十八1)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
头歌实践教学平台:大数据存储2023(十八1)

十八、MongoDB 之聚合函数查询统计

第1关:聚合管道操作符将文档定制格式输出(一)

任务描述
本关任务:按照编程要求,对集合 educoder 进行相应的查询输出。

相关知识
为了完成本关任务,你需要掌握:
1.聚合管道操作符的作用;
2.$project 的用法;
3.$match 的用法。

常用聚合管道操作符
常用的几个聚合管道操作符:

操作符 作用
$project 修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及

嵌套文档
match∣用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作
$limit 用来限制MongoDB聚合管道返回的文档数
$skip 在聚合管道中跳过指定数量的文档,并返回余下的文档
$unwind 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
$group 将集合中的文档分组,可用于统计结果
$sort 将输入文档排序后输出
注意:以上操作不会修改集合的内容,只是将集合以指定形式输出。

在数据库 mydb1 有集合 educoder 内容如下:

_id course author tags learning_num
1 Python表达式问题求解实训 李暾 Python基础,求解 1882
2 Java语言之基本语法 余跃 Java基础,语法 814
3 Python面向对象编程实训 李暾 Python基础,面向对象 143
4 Android综合实训之物联网移动应用开发(1) prophet5 Android,物联网,移动开发 207
$project 修改文档结构输出
有时候我们并不会用到文档的全部内容,只是使用其中几列,这时候就可以使用 project进行操作;或者有时候要重命名键值(列名),也可以使用project。

对集合 educoder 进行操作:

只输出作者 author 和学习人数 learning_num 信息,_id也不要不显示(_id默认是显示的):
db.educoder.aggregate({$project:{_id:0,author:1,learning_num:1}})
0 为不显示,非 0 为显示。
运行结果如图1所示:

图 1


重命名字段名(把 learning_num 重命名为 num):
db.educoder.aggregate({$project:{course:1,authoe:1,tags:1,num:'$learning_num'}})
运行结果如图2所示:

图 2


$match 筛选文档输出
有时候我们要在集合中筛选出符合特定条件的文档,这时候使用 $match 便可以很快实现。

只输出作者为“李暾”的文档:

db.educoder.aggregate({$match:{author:'李暾'}})
运行结果如图3所示:

图 3


编程要求
为了减少你的工作量,给出以下文档内容:

{
_id:1,
course:'Python表达式问题求解实训',
author:'李暾',
tags:['Python基础','求解'],
learning_num:1882
},
{
_id:2,
course:'Java语言之基本语法',
author:'余跃',
tags:['Java基础','语法'],
learning_num:814
},
{
_id:3,
course:'Python面向对象编程实训',
author:'李暾',
tags:['Python基础','面向对象'],
learning_num:143
},
{
_id:4,
course:'Android综合实训之物联网移动应用开发(1)',
author:'prophet5',
tags:['Android','物联网','移动开发'],
learning_num:207
}
先在命令行中操作,将上述文档插入数据库 test1 中的集合 educoder 中,然后仿照例子中的查询方法,再在右侧代码栏 Begin-End 的中按要求输入符合以下两条要求的命令,以分号;隔开(由于测试需要,请在代码里$符号前添加转义符`,不需要有空格,格式如:`$,平时在命令行操作不需要):

文档输出时只保留 course 和 learning_num 字段(_id也不要保留);
输出学习人数 learning_num 为82档。
具体的返回结果,请查看测试集。

测试说明
平台会对你编写的代码进行测试:

将你在代码行编写的命令传到数据库中操作,检测返回结果是否和目标一致。

开始你的任务吧,祝你成功!

#********* Begin *********#
echo "
db.educoder.aggregate({\$project:{_id:0,course:1,learning_num:1}});
db.educoder.aggregate({\$match:{learning_num:1882}});
"
#********* End *********#

有任何问题都可以随时关注私信!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 17:20:06

Qt+C++实战:校园商铺管理系统开发全流程与核心技术解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 17:18:38

横断面地面线数据整理:斜距高差反推平距高程并导入Excel全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 17:17:40

Aspen Plus热泵精馏模拟:从原理到乙醇-水体系节能优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 17:17:14

产品经理面试知识点梳理

产品经理面试知识点梳理一、产品经理核心能力模型(能力)1.1 能力全景图1.2 六大核心能力拆解1.3 优先级方法论(必考)二、产品经理必备素质(素质)2.1 七项关键素质2.2 高频素质面试题三、产品经理工具链&…

作者头像 李华
网站建设 2026/9/3 17:15:50

远程面试反作弊:深度伪造与活体检测技术实战解析

我在处理远程职位申请和线上面试时,越来越常听到一个略带黑色幽默的细节:面试官会突然要求候选人“对着摄像头挥挥手”“把头从左转到右”,甚至要求候选人报出屏幕上随机出现的一串数字。表面上看,这些动作像是活跃气氛&#xff0…

作者头像 李华