데이터를 파이프 라인에 따라 처리할 수 있는 프레임워크입니다.
aggregation framework를 사용하는 이유는
더 자세한 이유가 알고싶다면 https://secretartbook.tistory.com/21
db.user.aggregate
메서드는 파이프라인 단계를 Array형태로 나타냅니다.
db.user.aggregate{[{stage}, ...], options}
조건에 만족하는 Document만 filtering하는 과정입니다.
입력 형식: {$match: {<query>}}
예시
db.user.aggregate([{$match: {<ield: value}}])
Document에 대해 Grouping 연산을 수행합니다
{$group: {
_id: <expression>, // 표현식을 기준으로 그룹화
<field 1>: {<accumulatro 1>: <expression 1>},
...
}}
Project에서 지정한 필드 값을 다음 파이프라인 단계로 전달합니다. RDBMS의 SELECT와 같은 역할을 수행합니다.
$project: {
<field 1>: 0, // 0일 경우 보여주지않습니다.
<field 2>: 1 // 1일 경우 보여줍니다
}
정렬 조건에 맞게 파이프라인의 연산결과를 정렬합니다.
$sort: {
field: 1, // 1일경우 ASC로 정렬합니다.
field2: -1, // -1일경우 DESC로 정렬합니다.
}
입력한 갯수만큼 차례대로 Document를 skip한 데이터를 다음 파이프라인으로 전달합니다.
$skip: value // value 수만큼 skip 한 데이터를 다음 파이프라인으로 전달합니다.
컬렉션 내에서 입력한 갯수만큼 랜덤하게 Document를 출력합니다.
$sample: {
field: value // value 값만큼 랜덤하게 document를 출력합니다.
}
입력하는 문서 수의 카운트가 포함된 문서를 다음 단계로 전달
{
$match: {
score: {
$gt: 80
}
}
},
{
$count: "value" // 값의 이름
}
// {value : count된 수 } 가 결과로 나옵니다.
document에 새 필드를 추가합니다. Documnet 및 새로 추가된 필드에서 모든 기준 필드가 포함된 문서를 출력합니다.
파이프라인 연산으로 출력된 Document 갯수를 제한합니다.
$limit : value // value 값만큼 출력됩니다.
Document내의 배열 필드를 기반으로 각각 Document로 분리합니다.
$unwind:
{
path: <field path>,
includeArrayIndex: <string>,
preserveNullAndEmptyArrays: <boolean>
}
나머지..https://docs.mongodb.com/manual/meta/aggregation-quick-reference/
https://jaehun2841.github.io/2019/02/24/2019-02-24-mongodb-2/#aggregation-pipeline
https://www.fun-coding.org/mongodb_advanced1.html
https://ozofweird.tistory.com/entry/MongoDB-Aggregation-Pipeline