728x90
aggregate pipelines
집계 파이프라인 기능을 사용하면 stream내의 document에 다양한 기능들을 지원할 수 있다
- 그룹핑 가능
- 컬럼 연산 기능 및 새로운 컬럼에 저장
- 컬럼에 별칭 지정
- 필터링 기능 및 정렬
db.collection.aggregate([{ stage }, ...])
💡 stage 표현식 : $project, $match, $sort, $group
$project
열 단위로 검색(projection) 하거나 별칭을 지정할 수 있다. 기존 key값을 사용할 때는 $key
를 사용한다
# username 과 age 만 보기
db.user.aggregate({$project:{username:1, age:1}})
# 별칭 age ➜ userage , _id ➜ num
db.user.aggregate({$project:{username:1, userage:"$age", _id:0, num:"${_id}"}})
$match
stream 안의 document에서 조건에 일치하는 document를 필터링하는 표현식
# 나이가 30 이상인 경우의 _id, username, age
db.user.aggregate({$project:{username:1, age:1}},
{$match:{age:{$gt:30}}} )
# 나이가 30 이상이거나 성별이 'm'인 경우의 _id, username, age, gender
db.user.aggregate({$project:{username:1, age:1, gender:1}},
{$match:{$or:[{age:{$gt:30}},{gender:'m'}]}} )
$sort
stream 안의 document을 정렬하는 표현식. 1 은 오름차순
-1 은 내림차순
이다.
# 나이 기준으로 오름차순 정렬한 username 과 age
db.user.aggregate({$project:{username:1, age:1}},
{$sort:{age:1}} )
$group
- SQL문의 group by 기능을 제공
- 그룹핑되었을 때, pk기능으로
_id
를 사용하고$key
로 지정한다."_id":"$gender"
# gender 를 그룹핑
db.user.aggregate({$group:{"_id":"$gender"}})
# gender로 그룹핑 후, age의 sum, avg, max, min 값
db.user.aggregate({$group:{"_id":"$gender",
"cnt":{$sum:1},
"totalAge":{$sum:"$age"},
"avgAge":{$avg:"$age"},
"maxAge":{$max:"$age"},
"minAge":{$min:"$age"}}
})
💡 count 는 특별하게 {$sum:1} 로 표현
728x90
'Database > MongoDB' 카테고리의 다른 글
[MongoDB] 몽고DB의 문서(document) 저장, 수정, 삭제 (0) | 2023.09.27 |
---|---|
[MongoDB] 몽고DB의 조회(find) (0) | 2023.09.27 |