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}}

])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM