文章目录

  • 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聚合联系题目及参考答案相关推荐

  1. 2017西南计算机数学基础,[0838]《计算机数学基础》西南大学 2017 秋学期 计算机专业 作业题目及参考答案资料讲解.docx...

    [0838]<计算机数学基础>西南大学 2017 秋学期 计算机专业 作业题目及参考答案 [0838]<计算机数学基础>西南大学 2017 秋学期 计算机专业 作业题目及参考答 ...

  2. R语言题目及参考答案(3)

    本次题目主要是R语言统计推断方面的,包括点估计的矩法估计和极大似然估计,区间估计的单正态总体的均值和方差的估计.两正态总体的参数估计.比率的估计和样本容量的确定等等.需要代做r语言作业的直接加QQ19 ...

  3. c语言上机考试设计题及答案,C语言程序设计基础上机考试一题目及参考答案.doc...

    C语言程序设计基础上机考试一题目及参考答案 1.输入一串字符输入字符串中整数的个数输出找出一个大于给定整数m且紧随m的素数统计老年人各年龄段的人数并存到b数组中,n个人员的年龄放在a数组中.输入一串可 ...

  4. 计算机病毒相关试题,计算机病毒类考试题目以及参考答案

    计算机病毒类考试题目以及参考答案 ※木马的信息反馈机制收集的信息中最重要的是_________. A.服务端系统口令B.服务端IP C.服务端硬盘分区情况D.服务端系统目录 [正确答案:]B ※木马在 ...

  5. 计算机病毒考试及答案,计算机病毒类考试题目以及参考答案.doc

    计算机病毒类考试题目以及参考答案 计算机病毒类考试题目以及参考答案 计算机病毒类考试题目以及参考答案 计算机病毒类考试题目以及参考答案 ※ 木马的信息反馈机制收集的信息中最重要的是_________. ...

  6. R语言题目及参考答案(2)

    这次题目主要是描述性统计方面,包括数据预处理的相关操作,使用可视化图表方法进行探索性统计分析等等.需要代做r语言作业的加QQ1975728171. 关于包的安装等一些r语言基础知识,可以看看我另一篇的 ...

  7. 2015年CVTE校园招聘--Web后台服务开发工程师笔试题目及参考答案

    Web后台服务开发工程师笔试题目及参考答案 笔试时间:2014.09.14 地点: 广工 1.编程题:输入一串数字,返回查询数值的数组下标 解答:public static void main(Str ...

  8. mysql-面试题,包含建库、建表、数据及题目和参考答案分享

    MySQL-查询语句面试题,包含建库.建表.数据及题目和参考答案分享 提供以下自己手里的资源供大家做做练习,也方便自己做做回顾 1.数据准备 创建数据库 create database if not ...

  9. PTA 浙大版《C语言程序设计(第4版)》题目集 参考答案(编程题)

    目录 PTA 浙大版<C语言程序设计(第4版)>题目集 参考答案(编程题) 本答案配套详解教程专栏 练习2-1 Programming in C is fun! (5 分) 练习2-3 输 ...

最新文章

  1. 如何在大学和工作后让自己逐渐变强?
  2. 关于Android中工作者线程的思考
  3. Hadoop(一)之初识大数据与Hadoop
  4. 局部变量、全局变量、堆、堆栈、静态和全局
  5. 转:VC6.0与VC.net的具体区别
  6. key 和secret_Java Secret:加载和卸载静态字段
  7. [Leetcode][第24题][JAVA][两两交还的链表中的节点][递归][三指针]
  8. git分支建立删除,打tag
  9. 亚洲200佳 中国88家企业居首
  10. 程序员是如何一步一步被诈骗的?《原力计划-打卡挑战》第二周周榜揭晓
  11. 用LoadRunner实现接口测试
  12. Objective-C中的属性机制
  13. ReactNative之Image在Android设置圆角图片变形问题
  14. thinkpad T500开机大于10分钟,黑屏
  15. html中首行缩进两个字符
  16. oracle创建一个永久性表空间,Oracle表空间简单管理永久表空间
  17. 四、SolrCloud的安装
  18. matlab纵坐标两边标注,matlab纵坐标标注
  19. 全国计算机三级嵌入式 - 题库 - 真题(含答案) - 未来教育 - 视频讲解 - 资料获取
  20. php bootstrap 轮播,让Bootstrap轮播插件carousel支持左右滑动手势的三种方法

热门文章

  1. 如何设置主机电脑静态IP地址
  2. 夏日葵电商:开发一个微信商城系统多少钱
  3. Android 谈谈自动化测试
  4. python图片下载器(百度图片)
  5. QT5 隐藏系统标题栏,自己编写个性靓丽标题栏
  6. 激光电视开启未来,2021年是“大众化”的开始
  7. 美国主机BlueHost vs HostEase
  8. [Javascript 高级程序设计]学习心得记录3 根据对象数组的属性进行排序
  9. JS获取当月windows显示的日历(简易版本)
  10. 初学者入门:软件测试从零开始