728x90
반응형
PipeLine
- collection 이 각 stage를 거치면서 document 처리 및 집계
- 일부 처리는 shard에 대응 (각 shard에서 처리)
* pipeline : 이전 단계의 연산 결과를 다음 단계에서 사용
* stage 순서 중요!
SQL ↔︎ NoSQL
aggregation
db.score.aggregate(
score collection 에서
{$match:{"test":"midterm"}},
test가 midterm 인 document들을 뽑고,
{$project:{"kor":1}},
kor만 출력시켜서, {_id:"!..", kor:""}
{$group:{"_id":"test","average":{"$avg":"$kor"}}
집계해서 {_id:"test", average:n}으로 출력한다.
)
* $field : 해당 field 참조 시 사용 (= $$current.field)
db.score.aggregate(
{$match:{kor:{$gt:50}}},
{$project:{kor:1}},
{$group:{_id:'test', 'average':{$avg:'$kor'}}}
)
#project로 필요한 값만 가져와서 효율적으로 사용하기 위함
##연습문제>> 이름에 ‘동’이 들어가는 doc을 찾아서 해당 doc의 kor를 다 더해서 test라는
_id를 가지고 sum이라는 필드의 값으로 더해진 값을 출력(출력값: {_id:’test’, sum:260})
db.score.aggregate(
{$match:{name:/동/}},
{$group:{ _id:'test', 'sum':{$sum:'$kor'}}}
)
##연습문제>> aggregate를 사용해서, 이름, 국어, 영어만 출력하자(_id도 x)
db.score.aggregate(
{$project:{name:1, kor:1, eng:1, _id:0}})
##연습문제>>test가 midterm인 영어 평균을 구하자
db.score.aggregate(
{$match:{test:/mid/}},
{$group:{_id:'avg','avg':{$avg:'$eng'}}}
)
##연습문제>>test가 final 인 doc를 찾아서 이름, 국어, 영어, ‘국어와 영어의 합’을 출력하자
# 이런 복잡한 것을 못해서 Map Reduce가 나왔다! 자세한건 다음 게시글에!
728x90
반응형
'Web > MongoDB' 카테고리의 다른 글
[MongoDB]Map Reduce (0) | 2020.10.15 |
---|---|
[MongoDB]CRUD_연습문제 (0) | 2020.10.15 |
[MongoDB]CRUD ★ (0) | 2020.10.15 |
[MongoDB]Data Structure (0) | 2020.10.15 |
[mongoDB]NoSQL (0) | 2020.10.15 |