- count() , distinct() , sort() : -1 내림차순 , limit()
Q1. score의 전체 출력을 해보고 문서의 개수를 구하시오
db.score.find();
db.score.find().count();
Q2. score의 이름과 수학점수만 출력해보자
db.score.find({} , {name : 1 , mat : 1 , _id : 0})
Q3. score 수학점수 중 70점 이상만 출력해보자
db.score.find({mat:{$gte:70}} )
db.score.find({mat:{$gte:70}} ).count()
Q4. score이름과 국어점수가 80점 이상 출력하자
db.score.find( {kor:{$gte:80}} , {name: 1 , kor : 1 ,_id:0} );
db.score.find( {kor:{$gte:80}} , {name: 1 , kor : 1 ,_id:0}).count();
Q5. score이름과 국어 점수를 출력하되 국어점수 80점 이상 추출해서 합을 구하자
var sr = db.score.find( {kor:{$gte:80}} , {name: 1 , kor : 1 ,_id:0} );
var tot = 0;
while(sr.hasNext()){
res = sr.next();
print(res.name + " : " + res.kor);
tot += res.kor;
print("tot= " + tot);
}
print("tot= " + tot);
db.users.find().forEach(function(myDoc){print("User : " + myDoc.name); } );
var sr02 = db.Score.find( {kor : {$gte : 80}} , {name : 1 , kor : 1 , _id:0});
sr02.forEach(
function(x){
print(x.name +":" + x.kor);
});
>sr02.siClosed()
>sr02.close()
Q5) test가 midterm만 출력
db.score.find({"test": "midterm"} , {name : 1 , test :1 , _id d:0} );
Q6) 이름이 a로 시작되는 이름을 찾아보자
db.score.find(name:/^a/})
이름이 a나 e로 시작되는 이름을 찾아보자
db.score.find( {"$or": [ {"name" : "/^a/"} , {"name" : "/^e/"} ] });
Q7) score에서 test가 m으로 시작하는 문서의 개수를 구하자.
db.score.find({test: /^m/}).count();
Q8) 이름을 출력하되 중복되지 않게 출력하자
db.score.distinct("name");
Q9) 영어점수가 80점이상인 학생의 이름을 출력. (단, 중복 제거)
db.score.distinct({"name", {eng:{$gte:80}});
Q10)
if(myDocument){
var myName - mtDocument.name;
print(tojson(myName));
Q11) test를 출력하되 이름을 오름차순으로 정렬해보자.
db.score.find({} , {"name" : 1 , "test" : 1}).sort({"name" : 1});
Q12) 최대값 최소값 sort() + limit() 영어점수가 가장 높은 문서를 출력.
db.score.find({}).sort({eng: -1}).limit(1);
Q13) 국어 점수가 가장 낮은 문서를 출력하자.
db.score.find({}).sort({kor: 1}).limit(1);
Q14) 5개의 문서중에서 2를 건너뛰고 3줄만 출력해라.
db.score.find({}).sort({eng:-1}).limit(1);
Q15) 5개의 문서중에서 2를 건너뛰고 3줄만 출력해라. (단, 수학 점수는 내림차순)
Q16) test를 그룹별로 구현해보자.
WHERE $match
GROUP BY $group
HAVING $match
SELECT $project
ORDER BY $sort
LIMIT $limit
SUM() $sum
COUNT() $sortByCount
join $lookup
SELECT INTO NEW_TABLE $out
MERGE INTO TABLE $merge (Available starting in MongoDB 4.2)
UNION ALL $unionWith (Available starting in MongoDB 4.4)
- 몽고 DB에서 집계 처리하는 방법
1. Aggregation 프레임 워크
Sql 사용하는 group by 절과 sum등으로 이루어진다.
MongoShell에서 쿼리와 같은 방법으로 사용된다.
일부처리($group과 $sort)는 샤드에 대응하고 , 각 샤드에서 처리한다.
2. Map / Reduce 기능
Map함수 Reduce함수를 정의해서 집계처리를 한다.
Aggregation 프레임워크에서 할 수 없는 복잡한 집계작업을 수행하는데 사용.
샤드에 대응하고 있기 때문에 분산 처리를 실시하는 것이 가능하다.
3. 기타 집계 처리, 미들과 연계(하둡)
더큰 규모로 집계 처리를 하기 때문에 다른 집계 처리 미들웨어 시스템과의 연계를 한다.
미들 웨어(middleware system) = 분산환경 + 네트워크 통신 + 응용프로그램과의 연계
번외) 빅데이터 처리 (비정형 원칙)
수집 : 척화
처리 (집계) :MongoDB(js),Nosql(c,c++), 하둡(java 집계) ,
Spark
저장: 비정형(하둡) <-> 정형(데이터 웨어하우스)
==============================================================
Q16) 아래 데이터 입력후 확인하세요
db.product.save({Name :"notebook" ,price : 200 ,category :"material"});
db.product.save({Name :"pencil" ,price : 80 ,category :"material"});
db.product.save({Name :"salad" ,price : 200 ,category :"food"});
db.product.save({Name :"others" ,price : 20 ,category :"material"});
db.product.save({Name :"bread" ,price : 100 ,category :"food"});
Q17) 맵리듀스를 활용해서 집계를 구현해보자.
db.product.help()로가서 아래를 복사
db.product.mapReduce(mapFunction , reduceFunction , <optional params>)
1. mapFuction : emit를 매개인자로 집계할 key , value값을 지정한다.
function mymap(){
emit( this.category ,{category : this.category , Count : 1 , amount : this.price} );
}
2. reduceFunction: 집계를 구한다.
function myreduce(key ,values) {
var result = { category : key, count : 0 , amount: 0}
values.forEach(function (v){
result.count += v.count;
result.amount += v.amount;
} );
return result;
}
3. <optional params>
db.product.mapReduce(mymap , myreduce , {out:{replace:"myResult"}});
db.myResult.find();
Q18) score 컬렉션에서 test를 그룹화해서 개수를 구하자 (MR)myResult02
mapFuction : emit를 매개인자로 집계할 key , value값을 지정한다.
function mymap(){
emit( this.test ,{Category : this.test , Count : 1} );
}
2. reduceFunction: 집계를 구한다.
function myreduce(key ,values) {
var result = { test : key, count : 0}
values.forEach(function (v){
result.count += v.count;
} );
return result;
}
3. <optional params>
db.product.mapReduce(mymap , myreduce , {out:{replace:"myResult02"}});
db.myResult02.find();
Q19) test 그룹화해서 국어점수 합계 수학은 평균을 구하자 (MR)myResult03
function mymap(){
emit( this.kor , this.eng {Category : this.kor , Amount : 1} , {Category : this. eng , Avg : 1} );
}
2. reduceFunction: 집계를 구한다.
function myreduce(key ,values) {
var result = { test : key, count : 0}
values.forEach(function (v){
result.count += v.count;
} );
return result;
}
'MongoDB' 카테고리의 다른 글
몽고디비 샤딩 - 1 (0) | 2021.06.16 |
---|---|
몽고디비 - 파일 입출력 (0) | 2021.06.16 |
몽고디비3 (0) | 2021.06.15 |
MongoDB (0) | 2021.06.10 |