mongodb聚合联系题目及参考答案
文章目录
- mongodb作业
- 作业要求
- 参考答案
- 0、创建数据库、集合
- 1、 向emp集合中添加20条数据
- 2、查询薪水在3000-5000之间的员工
- 3、查询入职最早的3名员工信息
- 4、查询每个职位的平均工资
- 5、查询每个部门的最高工资和最低工资
- 6、查询至少有唱歌和跳舞两个爱好的员工信息
- 7、对工资分等级
- 8、统计每个职位的员工姓名
- 9、查询电话号码中有豹子号的员工信息 "000" "111" ... "999"
- 10、查询每个部门工资最高的员工电话
- 总结
- 在aggregate()方法聚合运算符
- $group表达式运算符
- 聚合表达式的字符串和算术运算符
mongodb作业
作业要求
1.向emp集合中添加20条数据
包含:员工姓名,职位,薪水,入职日期,部门,电话,爱好 等信息
其中 部门包含部门名称和部门经理 爱好为数组2.查询薪水在3000-5000之间的员工信息
3.查询入职最早的3名员工信息
4.查询每个职位的平均工资
5.查询每个部门的最高工资和最低工资
6.查询至少有唱歌和跳舞两个爱好的员工信息
7.对工资分等级、
- 0–3000 蓝领
- 3000-5000 白领
- 5000-金领
- 统计每个等级的人数
8.统计每个职位的员工姓名
9.查询电话号码中有豹子号的员工信息 “000” “111” … “999”
10.查询每个部门工资最高的员工电话
参考答案
0、创建数据库、集合
use my_db //常见my_db数据库
db.createCollection('emp')// 创建emp 集合
1、 向emp集合中添加20条数据
db.emp.insertMany([{name:"小王",age:28,position:"前台",salary:3500,date:"2020/4/5",department:{bm:"人才部",job:"员工"},phone:"8871085421",address:"武汉",hobby:["爬山","打球","唱歌"]
},{name:"小张",age:29,position:"前台",salary:3500,date:"2020/8/5",department:{bm:"人才部",job:"员工"},phone:"8871085621",address:"重庆",hobby:["跳舞","打球","唱歌"]
},
{name:"刘妮",age:18,position:"老板娘",salary:100000,date:"2020/3/14",department:{bm:"领导",job:"老板娘"},phone:"18871085421",address:"钟祥",hobby:["睡觉","旅游","唱歌"]
},{name:"小何",age:21,position:"技术部主管",salary:8500,date:"2020/5/3",department:{bm:"技术部",job:"技术总监"},phone:"18871085421",address:"襄阳",hobby:["打游戏","打球","旅游"]
},{name:"胡八一",age:38,position:"软件工程师",salary:9000,date:"2020/3/15",department:{bm:"技术部",job:"员工"},phone:"18671085421",address:"武汉",hobby:["爬山","打球","唱歌"]
},{name:"小肖",age:29,position:"HR",salary:4500,date:"2020/7/5",department:{bm:"销售部",job:"员工"},phone:"15871085621",address:"仙桃",hobby:["跑步","喝酒","吹牛"]
},{name:"瑞哥",age:58,position:"软件工程师",salary:9000,date:"2020/3/15",department:{bm:"技术部",job:"员工"},phone:"18671085421",address:"武汉",hobby:["爬山","打球","唱歌"]
},{name:"江哥",age:49,position:"数据库管理员",salary:7500,date:"2020/4/5",department:{bm:"技术部",job:"员工"},phone:"13465145621",address:"襄阳",hobby:["短跑","跳远","钓鱼"]
},{name:"王宝",age:38,position:"网管工程师",salary:9000,date:"2020/3/15",department:{bm:"技术部",job:"员工"},phone:"18671095421",address:"武汉",hobby:["爬山","打球","喝酒"]
},{name:"小五",age:29,position:"网络管理员",salary:4500,date:"2020/6/5",department:{bm:"技术部",job:"员工"},phone:"13471084521",address:"山东",hobby:["睡觉","打游戏"]
},{name:"小韩",age:19,position:"技术部",salary:4500,date:"2020/7/5",department:{bm:"技术部",job:"员工"},phone:"13471085621",address:"山东",hobby:["钓鱼","打游戏","喝酒"]
},{name:"胡一",age:38,position:"系统工程师",salary:9000,date:"2020/3/15",department:{bm:"技术部",job:"员工"},phone:"16871085421",address:"上海",hobby:["爬山","打球","唱歌"]
},{name:"王五",age:38,position:"销售",salary:5000,date:"2020/5/15",department:{bm:"销售部",job:"负责人"},phone:"17671085421",address:"美国",hobby:["爬山","打球","唱歌"]
},{name:"张二狗",age:29,position:"保安",salary:2500,date:"2020/4/5",department:{bm:"保安部",job:"员工"},phone:"12012054110",address:"仙桃",hobby:["跑步","打游戏","看电影"]
},{name:"李二狗",age:48,position:"保安",salary:3000,date:"2020/3/15",department:{bm:"保安部",job:"负责人"},phone:"78945612311",address:"武汉",hobby:["爬山","打球","唱歌"]
},{name:"冥蒙",age:49,position:"推销员",salary:7500,date:"2020/5/5",department:{bm:"销售部",job:"员工"},phone:"134651453321",address:"襄阳",hobby:["短跑","跳远","聊天"]
},{name:"小邓",age:28,position:"策划员",salary:5000,date:"2020/6/15",department:{bm:"技术部",job:"员工"},phone:"17771095421",address:"甘肃",hobby:["爬山","打球","喝酒"]
},{name:"周三",age:29,position:"讲师",salary:6500,date:"2020/6/5",department:{bm:"培训部",job:"员工"},phone:"1111084521",address:"山西",hobby:["睡觉","游戏","吃饭"]
},{name:"赵飞",age:19,position:"讲师",salary:6500,date:"2020/7/4",department:{bm:"培训部",job:"负责人"},phone:"13471081111",address:"西安",hobby:["钓鱼","打游戏","喝酒"]
},{name:"小田",age:28,position:"辅导员",salary:3500,date:"2020/3/15",department:{bm:"人才部",job:"负责人"},phone:"12871085421",address:"上海",hobby:["爬山","跳舞","唱歌"]
}
])
2、查询薪水在3000-5000之间的员工
db.emp.find({salary:{$gte:3000,$lte:5000}})
3、查询入职最早的3名员工信息
db.emp.find({}).sort({"date":1}).limit(3)
4、查询每个职位的平均工资
db.emp.aggregate({"$group":{"_id":"$position","avg":{"$avg":"$salary"}}})
5、查询每个部门的最高工资和最低工资
db.emp.aggregate({"$group":{"_id":"$department","max":{"$max":"$salary"},"min":{"$min":"$salary"}}})
6、查询至少有唱歌和跳舞两个爱好的员工信息
db.emp.find({$and:[{"hobby":"跳舞"},{"hobby":"唱歌"}]})
7、对工资分等级
- 0–3000 蓝领
- 3000-5000 白领
- 5000-金领
- 统计每个等级的人数
var a_count=0;
var b_count=0;
var c_count=0;
db.emp.find({}).forEach(function(emp){if(emp.salary>0 && emp.salary<3000){a_count+=1;}else if(emp.salary>=3000 && emp.salary<5000){b_count+=1;}else if(emp.salary == 5000){ c_count+=1;}}
)
print(" 0--3000 蓝领="+a_count+"\n","3000--5000 白领="+b_count+"\n","5000 金领="+c_count)
8、统计每个职位的员工姓名
db.emp.aggregate({$group:{_id:"$position",con:{$push:"$name"}}
})
9、查询电话号码中有豹子号的员工信息 “000” “111” … “999”
db.emp.find({$or:[{phone:/000/},{phone:/111/},{phone:/222/},{phone:/333/},{phone:/444/},{phone:/555/},{phone:/666/},{phone:/777/},{phone:/888/},{phone:/999/}]})
10、查询每个部门工资最高的员工电话
db.emp.aggregate([{$group:{_id:"$department.bm",max_salary:{$max:"$salary"},phone:{$push:"$phone"}}}])
总结
- 聚合知识
Collection对象提供了aggregate()方法来对数据进行聚合操作。
aggregate()方法的语法如下
aggregate(operators,[options],callback)
在aggregate()方法聚合运算符
运算符 | 说明 |
---|---|
$project | 通过重命名,添加或删除字段重塑文档。你也可以重新计算值,并添加子文档。 |
包括title并排除name:{$project:{title:1,name:0}} | |
把name重命名为title {KaTeX parse error: Expected '}', got 'EOF' at end of input: project{title:"name"}} | |
添加一个新的total字段,并用price和tax字段计算它的值 {KaTeX parse error: Expected '}', got 'EOF' at end of input: project{total:{add:[“price","price","price","tax”]}}} | |
$match | 通过使用query对象运算符来过滤文档集。 |
$limit | 限定可以传递到聚合操作的下一个管道中的文档数量。例如{$limit:5} |
$skip | 指定处理聚合操作的下一个管道前跳过的一些文档 |
$unwind | 指定一个数组字段用于分割,对每个值创建一个单独的文档。例如{unwind:"unwind:"unwind:"myArr"} |
$group | 把文档分成一组新的文档用于在管道中的下一级。新对象的字段必须在KaTeX parse error: Expected '}', got 'EOF' at end of input: …面的语句汇总value字段:{group:{set_id:“KaTeX parse error: Expected '}', got 'EOF' at end of input: 0_id",total:{sum:”$value"}}} |
$sort | 在把文档传递给处理聚合操作的下一个管道前对它们排序。排序指定一个带有field:<sort_order>属性的对象,其中<sort_order>为1表示升序,而-1表示降序 |
$group表达式运算符
运算符 | 说明 |
---|---|
$addToSet | 返回一组文档中所有文档所选字段的全部唯一值的数组。例如:colors:{$addToSet:“color”} |
$first | 返回一组文档中一个字段的第一个值。例如:firstValue:{first:"first:"first:"value"} |
$last | 返回一组文档中一个字段的最后一个值。例如:lastValue:{last:"last:"last:"value"} |
$max | 返回一组文档中一个字段的最大值。例如:maxValue:{max:"max:"max:"value"} |
$min | 返回一组文档中一个字段的最小值。例如:minValue:{min:"min:"min:"value"} |
$avg | 返回一组文档中以个字段的平均值。例如:avgValue:{avg:"avg:"avg:"value"} |
$push | 返回一组文档中所有文档所选字段的全部值的数组。例如:username:{push:"push:"push:"username"} |
$sum | 返回一组文档中以个字段的全部值的总和。例如:total:{sum:"sum:"sum:"value"} |
聚合表达式的字符串和算术运算符
运算符 | 说明 |
---|---|
$add | 计算数值的总和。例如:valuePlus5:{add:["add:["add:["value",5]} |
$divide | 给定两个数值,用第一个数除以第二个数。例如:valueDividedBy5:{divide:["divide:["divide:["value",5]} |
$mod | 取模。例如:{mod:["mod:["mod:["value",5]} |
$multiply | 计算数值数组的乘积。例如:{multiply:["multiply:["multiply:["value",5]} |
$subtract | 给定两个数值,用第一个数减去第二个数。例如:{subtract:["subtract:["subtract:["value",5]} |
$concat | 连接两个字符串 例如:{$concat:[“str1”,“str2”]} |
$strcasecmp | 比较两个字符串并返回一个整数来反应比较结果。例如 {strcasecmp:["strcasecmp:["strcasecmp:["value","$value"]} |
$substr | 返回字符串的一部分。例如:hasTest:{substr:["substr:["substr:["value",“test”]} |
$toLower | 将字符串转化为小写。 |
$toUpper | 将字符串转化为大写 |
mongodb聚合联系题目及参考答案相关推荐
- 2017西南计算机数学基础,[0838]《计算机数学基础》西南大学 2017 秋学期 计算机专业 作业题目及参考答案资料讲解.docx...
[0838]<计算机数学基础>西南大学 2017 秋学期 计算机专业 作业题目及参考答案 [0838]<计算机数学基础>西南大学 2017 秋学期 计算机专业 作业题目及参考答 ...
- R语言题目及参考答案(3)
本次题目主要是R语言统计推断方面的,包括点估计的矩法估计和极大似然估计,区间估计的单正态总体的均值和方差的估计.两正态总体的参数估计.比率的估计和样本容量的确定等等.需要代做r语言作业的直接加QQ19 ...
- c语言上机考试设计题及答案,C语言程序设计基础上机考试一题目及参考答案.doc...
C语言程序设计基础上机考试一题目及参考答案 1.输入一串字符输入字符串中整数的个数输出找出一个大于给定整数m且紧随m的素数统计老年人各年龄段的人数并存到b数组中,n个人员的年龄放在a数组中.输入一串可 ...
- 计算机病毒相关试题,计算机病毒类考试题目以及参考答案
计算机病毒类考试题目以及参考答案 ※木马的信息反馈机制收集的信息中最重要的是_________. A.服务端系统口令B.服务端IP C.服务端硬盘分区情况D.服务端系统目录 [正确答案:]B ※木马在 ...
- 计算机病毒考试及答案,计算机病毒类考试题目以及参考答案.doc
计算机病毒类考试题目以及参考答案 计算机病毒类考试题目以及参考答案 计算机病毒类考试题目以及参考答案 计算机病毒类考试题目以及参考答案 ※ 木马的信息反馈机制收集的信息中最重要的是_________. ...
- R语言题目及参考答案(2)
这次题目主要是描述性统计方面,包括数据预处理的相关操作,使用可视化图表方法进行探索性统计分析等等.需要代做r语言作业的加QQ1975728171. 关于包的安装等一些r语言基础知识,可以看看我另一篇的 ...
- 2015年CVTE校园招聘--Web后台服务开发工程师笔试题目及参考答案
Web后台服务开发工程师笔试题目及参考答案 笔试时间:2014.09.14 地点: 广工 1.编程题:输入一串数字,返回查询数值的数组下标 解答:public static void main(Str ...
- mysql-面试题,包含建库、建表、数据及题目和参考答案分享
MySQL-查询语句面试题,包含建库.建表.数据及题目和参考答案分享 提供以下自己手里的资源供大家做做练习,也方便自己做做回顾 1.数据准备 创建数据库 create database if not ...
- PTA 浙大版《C语言程序设计(第4版)》题目集 参考答案(编程题)
目录 PTA 浙大版<C语言程序设计(第4版)>题目集 参考答案(编程题) 本答案配套详解教程专栏 练习2-1 Programming in C is fun! (5 分) 练习2-3 输 ...
最新文章
- 如何在大学和工作后让自己逐渐变强?
- 关于Android中工作者线程的思考
- Hadoop(一)之初识大数据与Hadoop
- 局部变量、全局变量、堆、堆栈、静态和全局
- 转:VC6.0与VC.net的具体区别
- key 和secret_Java Secret:加载和卸载静态字段
- [Leetcode][第24题][JAVA][两两交还的链表中的节点][递归][三指针]
- git分支建立删除,打tag
- 亚洲200佳 中国88家企业居首
- 程序员是如何一步一步被诈骗的?《原力计划-打卡挑战》第二周周榜揭晓
- 用LoadRunner实现接口测试
- Objective-C中的属性机制
- ReactNative之Image在Android设置圆角图片变形问题
- thinkpad T500开机大于10分钟,黑屏
- html中首行缩进两个字符
- oracle创建一个永久性表空间,Oracle表空间简单管理永久表空间
- 四、SolrCloud的安装
- matlab纵坐标两边标注,matlab纵坐标标注
- 全国计算机三级嵌入式 - 题库 - 真题(含答案) - 未来教育 - 视频讲解 - 资料获取
- php bootstrap 轮播,让Bootstrap轮播插件carousel支持左右滑动手势的三种方法