Notice
Recent Posts
Recent Comments
영혼의 요양소
MongoDB 연습 문제2 본문
MongoDB/ 몽고/ 몽고 디비/ 몽고 DB/ 데이터베이스
//먼저 cmd에서 mongo를 입력해 켜고, //아래 DB를 한 줄씩 입력한다. db.Score.drop() db.Score.insert({name:"aaa",kor:90,eng:90,mat:98, test:"midterm"}) db.Score.insert({name:"bbb",kor:100,eng:100,mat:76, test:"term"}) db.Score.insert({name:"ccc",kor:80,eng:55,mat:67, test:"term"}) db.Score.insert({name:"ddd",kor:70,eng:69,mat:89, test:"midterm"}) db.Score.insert({name:"eee",kor:60,eng:80,mat:78, test:"term"}) 1.이름, 국어,영어,수학을 출력하되 기말고사만 출력하라. db.Score.find({"test":"term"},{"name":1,"kor":1,"eng":1,"mat":1}); 2.이름과 중간고사만 출력하라. db.Score.find({"test":"midterm"},{"name":1}); 3.이름과 국어점수를 출력하되 국어점수가 90점이상인 학생의 중간고사만 출력하라. db.Score.find({"test":"midterm","kor":{"$gte":90}},{"name":1,"kor":1}); 4.이름,국,영,수를 출력하되 모든 점수가 80이상인 학생의 점수를 출력하라. db.Score.find({"kor":{"$gte":80 }, "eng":{"$gte":80 }, "mat":{"$gte":80 } },{ "name":1, "kor":1, "eng":1, "mat":1 }); 5.국어의 합을 구하라. db.Score.group({"initial":{"sumkor":0},"reduce":function(obg,prev){ prev.sumkor=prev.sumkor+obj.kor-0; }}); 6.국어의 합과 수학을 평균을 구하라. db.Score.group({"initial":{"sumkor":0,"summat":0,"count":0,"avgkor":0,"avgmat":0}, "reduce":function(obj,prev) {prev.sumkor=prev.sumkor+obj.kor - 0; prev.summat=prev.summat+obj.mat - 0; prev.count++; prev.avgkor=prev.sumkor/prev.count; prev.avgmat=prev.summat/prev.count; }}); db.Score.group({ "initial":{ "sumkor":0, "summat":0, "countmat":0 }, "reduce":function(obj,prev){ prev.sumkor += obj.kor; prev.summat += obj.mat; prev.countmat++; }, "finalize": function(prev) { prev.averagemat = prev.summat / prev.countmat; } }); 7.중간고사인 학생의 수학의 합을 구해라. db.Score.group({ "initial" :{"summat":0 }, "reduce":function(obj,prev){ prev.summat += obj.mat; }, "cond": { "test":"midterm" } }); 8.국어의합과 평균을 구하되 test를 그룹으로 구현하라. db.Score.group({ "key":{ "test":true }, "initial" :{"sumkor":0,"sumavgkor":0,"count":0 }, "reduce":function(obj,prev){ prev.sumkor += obj.kor; prev.sumavgkor += obj.kor; prev.count++; }, "finalize": function(prev) { prev.averagekor = prev.sumavgkor / prev.count; delete prev.count; delete prev.sumavgkor; } }); 9.Score테이블의 국어는 최고점수를 출력하라. db.Score.group({ "initial":{}, "reduce":function(obj,prev){ prev.maxkor = isNaN(prev.maxkor) ? obj.kor : Math.max(prev.maxkor, obj.kor); } }); 10.Score테이블의 영어 최고점수와 수학 최저점수를 출력하라. db.Score.group({ "initial":{}, "reduce":function(obj,prev){ prev.maxeng = isNaN(prev.maxeng) ? obj.eng : Math.max(prev.maxeng, obj.eng); prev.minmat = isNaN(prev.minmat) ? obj.mat : Math.min(prev.minmat, obj.mat); } }); 11. test의 그룹별 수학최고점수와 최저 점수를 구하라. 단, 이름에 a, b가 들어있는학생 기준으로. db.Score.group({ "key":{"test":true}, "initial":{}, "reduce":function(obj,prev){ prev.maxmat = isNaN(prev.maxmat) ? obj.mat : Math.max(prev.maxmat, obj.mat) prev.minmat = isNaN(prev.minmat) ? obj.mat : Math.min(prev.minmat, obj.mat); }, "cond":{$or:[{name:/^a/},{name:/^b/}]} }); db.Score.group({ key:{test:true}, initial:{}, reduce:function(cur,res){ res.minmat = isNaN(res.minmat)? cur.mat: Math.min(res.minmat, cur.mat) res.maxmat= isNaN(res.maxmat)? cur.mat: Math.max(res.maxmat, cur.mat)}, cond:{$or:[{name:/^a/}, {name:/^b/}]}})