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