집계, 통계를 처리할 때 Aggregation-PipeLine을 사용하면 된다
$project - 출력 도큐먼트상에 배치할 필드를 지정한다.(projected)
$match - 처리될 도큐먼트를 선택하는 것. find()와 비슷한 역할을 수행한다.
$limit - 다음 단계에 전달될 도큐먼트의 수를 제한한다.
$skip - 지정된 수의 도큐먼트를 건너뛴다.
$unwind -배열을 확장하여 각 배열 항목에 대해 하나의 출력 도큐먼트를 생성한다.
$group -지정된 키로 도큐먼트를 그룹화한다.
const stats = await Tour.aggregate([
{
$match: {
ratingsAverage: { $gte: 4.5 },
},
},
{
$group: {
_id: null,
avgRating: { $avg: '$ratingsAverage' },
avgPrice: { $avg: '$price' },
minPrice: { $min: '$price' },
maxPrice: { $max: '$price' },
},
},
]);
$sort -도큐먼트를 정렬한다.
$geoNear - 지리 공간위치 근처의 도큐먼트를 선택한다.
$out - 파이프라인의 결과(출력)를 컬렉션에 쓴다.
$redact -특정 데이터에 대한 접근을 제어한다.