NoSQL数据库案例实战--MongoDB数据库数据的插⼊、查询、更新、删除----强化练习(⼆)
张杰谢娜的个人资料MongoDB 数据库数据的插⼊、查询、更新、删除 ---- 强化练习(⼆)
本环境是基于 Centos 7.8 系统构建mongodb-enterprise-4.2.8学习环境
具体构建,请参考
1、创建⼀年级的3个班,并随机添加 10 名学⽣;
1 2 3 4 5 6 7 8 9 10 11>for(grade_index in(grade = ['grade_1_1', 'grade_1_2', 'grade_1_3'])) {
hobbys=['draw', 'dance', 'running', 'sing', 'football', 'basketball', 'computer', 'python']          for(var i = 1; i <= 10; i++) {
db[grade[grade_index]].insert({
"name": "zhangsan"+ i,
"sex": und(Math.random() * 10) % 2,
"age": und(Math.random() * 6) + 3,
"hobby": [und(Math.random() * 6)]]
});
}
} 
查看
查看⼀年级⼆班grade_1_2中的所有学⽣
查看⼀年级⼆班grade_1_2中所有年龄是 4 岁的学⽣
查看⼀年级⼆班grade_1_2中所有年龄⼤于 4 岁的学⽣
查看⼀年级⼆班grade_1_2中所有年龄⼤于 4 岁并且⼩于 7 岁的学⽣
查看⼀年级⼆班grade_1_2中所有年龄⼤于 4 岁并且性别值为0的学⽣
查看⼀年级⼆班grade_1_2中所有年龄⼩于 4 岁或者⼤于 7 岁的学⽣
查看⼀年级⼆班grade_1_2中所有姓名带zhangsan1的学⽣
查看⼀年级⼆班grade_1_2中所有姓名带zhangsan1和zhangsan2的学⽣
查看⼀年级⼆班`grade_1_2`中所有兴趣爱好包括画画的学⽣
查看⼀年级⼆班`grade_1_2`中所有兴趣爱好既包括画画⼜包括跳舞的学⽣
冰雨 刘德华
查看⼀年级⼆班grade_1_2中所有兴趣爱好有三项的学⽣的学⽣数⽬
查看⼀年级⼆班的第⼆位学⽣
查看⼀年级⼆班的学⽣,按年纪升序
查看⼀年级⼆班的学⽣,按年纪降序
查看⼀年级⼆班的学⽣,年龄值有哪些
查看⼀年级⼆班的学⽣,兴趣覆盖范围有哪些
查看⼀年级⼆班的学⽣,男⽣(`sex`为 0)年龄值有哪些
删除
⼀年级⼆班grade_1_2, 删除所有 4 岁的学⽣
⼀年级⼆班grade_1_2, 删除第⼀位 6 岁的学⽣
修改
⼀年级⼆班grade_1_2中,修改名为zhangsan7的学⽣,年龄为 8 岁,兴趣爱好为 跳舞和画画;
⼀年级⼆班`grade_1_2`中,追加zhangsan7`学⽣兴趣爱好唱歌;
⼀年级⼆班`grade_1_2`中,追加zhangsan7`学⽣兴趣爱好吹⽜和打篮球;
⼀年级⼆班`grade_1_2`中,追加`zhangsan7`学⽣兴趣爱好唱歌和打篮球,要保证`hobby`数组不重复;
⼀年级⼆班grade_1_2中,删除zhangsan7学⽣的sex属性
⼀年级⼆班grade_1_2中,删除zhangsan7学⽣的hobby数组中的头元素
⼀年级⼆班`grade_1_2`中,删除`zhangsan7`学⽣的`hobby`数组中的尾元素
⼀年级⼆班`grade_1_2`中,删除`zhangsan7`学⽣的`hobby`数组中的`sing`元素
分组
新建⼀个集合grade_1_4,记录⼀年级四班在期中考试时的成绩;
1 2 3for(var i = 1; i <= 10; i++) {      db.grade_1_4.insert({
4
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23          "name": "zhangsan"+ i,
"sex": und(Math.random() * 10) % 2,
"age": und(Math.random() * 6) + 3,
"score": {
"chinese": 60 + und(Math.random() * 40),              "math": 60 + und(Math.random() * 40),              "english": 60 + und(Math.random() * 40)          }
北京奥运歌曲});
统计每名学⽣在考试中的总分
1 2 3 4 5 6 7 8 9 10 11 12 13 ade_up({
key: {"name": 1},
许志安出轨cond: {},
reduce: function(curr, result) {
initial: { total : 0 }
})
统计每名男⽣在考试中的总分
1 2 3 4 5 6 7 8 9 10 11 12  db.grade_up({
key: {"name": 1},
cond: {"sex": 0},
reduce: function(curr, result) {
爱了才懂
13 14 15      initial: { total : 0 }  }) 
统计每名男⽣在考试中的总分及平均分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ade_up({
key: {"name": 1},
cond: {"sex": 0},
reduce: function(curr, result) {
initial: { total : 0 },
finalize: function(item) {
item.avg = (al / 3).toFixed(2);
如果我们换一换return item;
}
}) 
聚合
根据姓名分组, 并统计⼈数
1 2 3 4 5 Collection('grade_1_4').aggregate([      {$group: {_id: "$name", num: {$sum: 1}}},      {$match: {num: {$gt: 1}}}
])
统计每名学⽣在考试中的总分
1 2 3 4 5  db.getCollection('grade_1_4').aggregate([
{$group: {_id: "$name", score: {$sum: {$sum: ["$score.chinese", "$score.math", "$lish"]}}}} ])
统计每名男⽣在考试中的总分