정의
그룹 내 첫 n 개 요소의 집계를 반환합니다. 그룹 단계의 입력 데이터에 정의된 정렬 순서가 있는 경우에만 결과에 의미가 있습니다. 그룹에 n 개 미만의 요소가 포함된 경우 $firstN은 그룹의 모든 요소를 반환합니다.
$firstN 축적자는 다음 단계에서 사용할 수 있습니다.
참고
명확화
이 페이지에서는 $firstN을 축적자로 사용할 때에 대해 설명합니다. 축적자는 입력 문서 그룹 전체에 걸쳐 합계, 최댕값 또는 최소값과 같은 단일 집계 값을 반환합니다.
$firstN를 다른 다음 문맥에서도 사용할 수 있습니다:
$firstN (expression)배열의 시작에서부터 지정된 수의 요소를 반환합니다.$firstN (window function)는$setWindowFields단계에서 특정 창의 문서에서 첫 번째n값을 반환하기 위해 사용됩니다.
구문
{ $firstN: { input: <expression>, n: <expression> } }
옵션
필드 | 유형 | 설명 |
|---|---|---|
| 표현식 | 입력 그룹의 각 문서를 대상으로 |
| 표현식 | The number of elements that |
행동
Null 및 누락된 값
$firstNnull 값을 필터링하지 않습니다.$firstN누락된 값을 null로 변환합니다.
$firstN 과 $topN 의 비교
$firstN 축적자와 $topN 축적자는 모두 비슷한 결과를 달성할 수 있습니다.
일반적으로 다음과 같습니다.
$group에 들어오는 문서가 이미 주문된 경우$firstN을 사용해야 합니다.상위
n요소를 정렬하고 선택하는 경우$topN을 사용하여 하나의 축적자로 두 작업을 모두 수행할 수 있습니다.
예시
The examples on this page use the movies collection in the sample_mflix sample dataset. To learn how to load the sample dataset into your MongoDB deployment, see Import Sample Data Into Your Atlas Deployment.
단일 장르의 첫 세 영화 찾기
$firstN 축적자를 사용하여 한 장르에서 처음 세 개의 영화를 찾을 수 있습니다.
db.movies.aggregate( [ { $match: { genres: "Horror" } }, { $sort: { year: 1 } }, { $group: { _id: "Horror", firstThreeMovies: { $firstN: { input: [ "$title", "$year" ], n: 3 } } } } ] )
이전 파이프라인:
$match를 사용하여Horror이genres배열에 포함된 영화로 결과를 필터합니다.year별로 결과를 오름차순으로 정렬합니다.모든 결과 문서를 단일 그룹으로 그룹합니다.
input : ["$title", "$year"]을 사용하여$firstN에 입력되는 필드를 지정합니다.$firstN을 사용하여n: 3으로Horror장르에 대한 처음 세 개의 문서를 반환합니다.
여러 장르의 첫 세 영화 찾기
$firstN 축적자를 사용하여 각 장르에서 처음 n 개의 입력 필드를 찾을 수 있습니다.
db.movies.aggregate( [ { $unwind: "$genres" }, { $sort: { year: 1 } }, { $group: { _id: "$genres", movies: { $firstN: { input: [ "$title", "$year" ], n: 3 } } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
이전 파이프라인:
genres배열에서$unwind를 사용하여 각 장르별 별도 문서를 만들억니다.year별로 결과를 오름차순으로 정렬합니다.$group을 사용하여genres를 기준으로 결과를 그룹화합니다.$firstN을 사용하여n: 3인 각 장르에 대해 처음 세 개의 문서를 반환합니다.input : ["$title", "$year"]을 사용하여$firstN에 입력되는 필드를 지정합니다.독자성을 향상시키기 위해 출력을 5개 문서로 제한합니다.
그룹 키를 기반으로 n 설정
그룹 키에 따라 n의 값을 동적으로 할당할 수 있습니다. 이 예시에서, $cond 표현식은 rated 필드를 사용하여 n의 값을 변경합니다:
db.movies.aggregate([ { $match: { rated: { $in: ["G", "PG", "PG-13", "R"] } } }, { $sort: { title: 1 } }, { $group: { _id: {"rated": "$rated"}, movies: { $firstN: { input: "$title", n: { $cond: { if: { $eq: ["$rated", "PG"] }, then: 3, else: 1 } } } } } } ] )
이전 파이프라인:
G,PG,PG-13,R평점을 가진 영화에 대한 필터.결과를
title을(를) 기준으로 알파베숫순으로 정렬합니다.영화를
rated(영화 평점)로 분류합니다.$cond표현식을 사용하여PG등급 영화에 대해3개의 영화를 반환하고 모든 다른 등급에 대해1개의 영화를 반환합니다.
출력에서 PG 평점은 3 개의 영화를 반환하고, G, PG-13, R 평점은 각각 1 개의 영화를 반환합니다.