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