zoukankan      html  css  js  c++  java
  • MongoDB数据操作练习

    1、创建一年级的3个班,并随机添加 10 名学生;

    >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": Math.round(Math.random() * 10) % 2,
                   "age": Math.round(Math.random() * 6) + 3,
                   "hobby": [Hobbys[Math.round(Math.random() * 6)]]
               });
           }
       } 

    查看

    查看一年级二班grade_1_2中的所有学生

    db.getCollection('grade_1_2').find({})

    查看一年级二班grade_1_2中所有年龄是 4 岁的学生

    db.getCollection('grade_1_2').find({"age": 4})

    查看一年级二班grade_1_2中所有年龄大于 4 岁的学生

    db.getCollection('grade_1_2').find({"age": {$gt: 4}})

    查看一年级二班grade_1_2中所有年龄大于 4 岁并且小于 7 岁的学生

    db.getCollection('grade_1_2').find({"age": {$gt: 4, $lt: 7}})

    查看一年级二班grade_1_2中所有年龄大于 4 岁并且性别值为0的学生

    db.getCollection('grade_1_2').find({"age": {$gt: 4}, "sex": 0})

    查看一年级二班grade_1_2中所有年龄小于 4 岁或者大于 7 岁的学生

    db.getCollection('grade_1_2').find({$or: [{"age": {$lt: 4}}, {"age": {$gt: 6}}]})

    查看一年级二班grade_1_2中所有年龄是 4 岁或 6 岁的学生

    db.getCollection('grade_1_2').find({"age": {$in: [4, 6]}})

    查看一年级二班grade_1_2中所有姓名带zhangsan1的学生

    db.getCollection('grade_1_2').find({"name": {$regex: "zhangsan1"}})

    查看一年级二班grade_1_2中所有姓名带zhangsan1和zhangsan2的学生

    db.getCollection('grade_1_2').find({"name": {$in: [new RegExp(""zhangsan1"), new RegExp(""zhangsan2")]}}) 

    查看一年级二班grade_1_2中所有兴趣爱好有三项的学生

    db.getCollection('grade_1_2').find({"hobby": {$size: 3}}) 

    查看一年级二班`grade_1_2`中所有兴趣爱好包括画画的学生

    db.getCollection('grade_1_2').find({"hobby": "drawing"})

    查看一年级二班`grade_1_2`中所有兴趣爱好既包括画画又包括跳舞的学生

    db.getCollection('grade_1_2').find({"hobby": {$all: ["drawing", "dance"]}}) 

    查看一年级二班grade_1_2中所有兴趣爱好有三项的学生的学生数目

    db.getCollection('grade_1_2').find({"hobby": {$size: 3}}).count() 

    查看一年级二班的第二位学生

    db.getCollection('grade_1_2').find({}).limit(1).skip(1) 

    查看一年级二班的学生,按年纪升序

    db.getCollection('grade_1_2').find({}).sort({"age": 1}) 

    查看一年级二班的学生,按年纪降序

    db.getCollection('grade_1_2').find({}).sort({"age": -1}) 

    查看一年级二班的学生,年龄值有哪些

    db.getCollection('grade_1_2').distinct('age')  

    查看一年级二班的学生,兴趣覆盖范围有哪些

    db.getCollection('grade_1_2').distinct('hobby')  

    查看一年级二班的学生,男生(`sex`为 0)年龄值有哪些

    db.getCollection('grade_1_2').distinct('age', {"sex": 0})

    删除

    一年级二班grade_1_2, 删除所有 4 岁的学生

    db.getCollection('grade_1_2').remove({"age": 4})  

    一年级二班grade_1_2, 删除第一位 6 岁的学生

    db.getCollection('grade_1_2').remove({"age": 6}, {justOne: 1})  

    修改

    一年级二班grade_1_2中,修改名为zhangsan7的学生,年龄为 8 岁,兴趣爱好为 跳舞和画画;

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$set: {"age": 8, "hobby": ["dance", "drawing"]}}) 

     一年级二班`grade_1_2`中,追加zhangsan7`学生兴趣爱好唱歌;

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$push: {"hobby": "sing"}}) 

     一年级二班`grade_1_2`中,追加zhangsan7`学生兴趣爱好吹牛和打篮球;

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$push: {"hobby": {$each: ["brag", "play_basketball"]}}}) 

     一年级二班`grade_1_2`中,追加`zhangsan7`学生兴趣爱好唱歌和打篮球,要保证`hobby`数组不重复;

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$addToSet: {"hobby": {$each: ["sing1", "play_basketball"]}}})  

    新学年,给一年级二班所有学生的年龄都增加一岁

    db.getCollection('grade_1_2').update({}, {$inc: {"age": 1}}, {multi: true})  

    一年级二班grade_1_2中,删除zhangsan7学生的sex属性

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$unset: {"sex": 1}}) 

    一年级二班grade_1_2中,删除zhangsan7学生的hobby数组中的头元素

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pop: {"hobby": -1}})  

     一年级二班`grade_1_2`中,删除`zhangsan7`学生的`hobby`数组中的尾元素

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pop: {"hobby": 1}})  

     一年级二班`grade_1_2`中,删除`zhangsan7`学生的`hobby`数组中的`sing`元素

    db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pull: {"hobby": "sing"}}  

    分组

    新建一个集合grade_1_4,记录一年级四班在期中考试时的成绩;

     for (var i = 1; i <= 10; i++) {
    
            db.grade_1_4.insert({
    
                "name": "zhangsan" + i,
    
                "sex": Math.round(Math.random() * 10) % 2,
    
                "age": Math.round(Math.random() * 6) + 3,
    
                "score": {
    
                    "chinese": 60 + Math.round(Math.random() * 40),
    
                    "math": 60 + Math.round(Math.random() * 40),
    
                    "english": 60 + Math.round(Math.random() * 40)
    
                }
    
            });
    
        }  

    统计每名学生在考试中的总分 

     db.grade_1_4.group({
    
           key: {"name": 1},
    
           cond: {},
    
           reduce: function(curr, result) {
    
    result.total += curr.score.chinese + curr.score.math + curr.score.english;
    
           },
    
           initial: { total : 0 }
    
       })
    

    统计每名男生在考试中的总分

      db.grade_1_4.group({
    
           key: {"name": 1},
    
           cond: {"sex": 0},
    
           reduce: function(curr, result) {
    
    result.total += curr.score.chinese + curr.score.math + curr.score.english;
    
           },
    
           initial: { total : 0 }
    
       })  

    统计每名男生在考试中的总分及平均分 

     db.grade_1_4.group({
    
           key: {"name": 1},
    
           cond: {"sex": 0},
    
           reduce: function(curr, result) {
    
    result.total += curr.score.chinese + curr.score.math + curr.score.english;
    
           },
    
           initial: { total : 0 },
    
           finalize: function(item) {
    
    item.avg = (item.total / 3).toFixed(2);
    
    return item;
           }
       })  

    聚合

    根据姓名分组, 并统计人数 

    db.getCollection('grade_1_4').aggregate([{$group: {_id: "$name", num: {$sum: 1}}}])  

    根据姓名分组, 并统计人数,过滤人数大于 1 的学生

     db.getCollection('grade_1_4').aggregate([
    
           {$group: {_id: "$name", num: {$sum: 1}}},
    
           {$match: {num: {$gt: 1}}}
    
       ])

    统计每名学生在考试中的总分

       db.getCollection('grade_1_4').aggregate([
    
           {$group: {_id: "$name", score: {$sum: {$sum: ["$score.chinese", "$score.math", "$score.english"]}}}}
    
    ])

    统计每名男生在考试中的总分

    db.getCollection('grade_1_4').aggregate([
    
       {$match: {sex: 0}},
    
       {$group: {_id: "$name", score: {$sum: {$sum: ["$score.chinese", "$score.math", "$score.english"]}}}}
    
    ])

    统计每名男生在考试中的总分, 总分降序

    db.getCollection('grade_1_4').aggregate([
    
           {$match: {sex: 0}},
    
           {$group: {_id: "$name", score: {$sum: {$sum: ["$score.chinese", "$score.math", "$score.english"]}}}},
    
           {$sort: {score: 1}}
    
    ])
  • 相关阅读:
    动态规划-重叠子问题
    百度 谷歌 Twitter,这么多短链接服务(Short Url)究竟哪家强?
    java中String初始化的两种方式
    bzoj 1218 [HNOI2003]激光炸弹
    Android TextView 横向滚动(跑马灯效果)
    混合高斯模型的EM求解(Mixtures of Gaussians)及Python实现源代码
    【Allwinner ClassA20类库分析】 2.free pascal语法及结构简析
    昂贵的聘礼
    C++11时间具体解释
    C++开发人脸性别识别教程(7)——搭建MFC框架之界面绘制
  • 原文地址:https://www.cnblogs.com/py2019/p/11991883.html
Copyright © 2011-2022 走看看