정의
그룹 에 있는 첫 n 요소의 집계 반환합니다. 결과는 그룹화 단계에 대한 입력 데이터에 정의된 정렬 순서가 있는 경우에만 의미가 있습니다. 그룹 n개 미만의 요소가 포함된 경우 $firstN는 그룹 의 모든 요소를 반환합니다.
$firstN 축적자 다음 단계에서 사용할 수 있습니다.
참고
명확화
이 페이지에서는 축적자 사용되는 $firstN 에 대해 설명합니다. 축적자는 입력 문서 그룹 에서 합계, 최대값, 최소값과 같은 단일 애그리게이션 값을 반환합니다.
다음과 같은 다른 컨텍스트에서도 $firstN를 사용할 수 있습니다.
$firstN (expression)배열 의 시작 부분부터 지정된 수의 요소를 반환합니다.$firstN (window function)는$setWindowFields단계에서 특정 창 문서에서 처음n값을 반환하는 데 사용됩니다.
구문
{ $firstN: { input: <expression>, n: <expression> } }
옵션
필드 | 유형 | 설명 |
|---|---|---|
| 표현식 |
|
| 표현식 |
|
행동
Null 및 누락된 값
$firstNnull 값을 필터링하지 않습니다.$firstN누락된 값을 null로 변환합니다.
$firstN과 $topN 비교
$firstN 축적자와 $topN 축적자는 모두 비슷한 결과를 달성할 수 있습니다.
일반적으로 다음과 같습니다.
$group에 들어오는 문서가 이미 주문된 경우$firstN을 사용해야 합니다.상위
n요소를 정렬하고 선택하는 경우$topN을 사용하여 하나의 축적자로 두 작업을 모두 수행할 수 있습니다.
예시
이 페이지의 예시에서는 sample_mflix 샘플 데이터 세트의 movies 컬렉션 사용합니다. 샘플 데이터 세트를 MongoDB deployment 에 로드하는 방법을 학습 보려면 Atlas 배포에 샘플 데이터 가져오기를 참조하세요.
단일 장르에 대한 처음 세 편의 영화 찾기
$firstN 축적자 사용하여 단일 장르에서 처음 세 영화를 찾을 수 있습니다.
db.movies.aggregate( [ { $match: { genres: "Horror" } }, { $sort: { year: 1 } }, { $group: { _id: "Horror", firstThreeMovies: { $firstN: { input: [ "$title", "$year" ], n: 3 } } } } ] )
이전 파이프라인:
$match를 사용하여genres배열 에Horror가 포함된 영화로 결과를 필터하다 합니다.결과를
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 } ] )
이전 파이프라인:
$unwind를 사용하여genres배열 의 각 장르에 대해 별도의 문서 생성합니다.결과를
year을 기준으로 오름차순으로 정렬합니다.$group을 사용하여genres를 기준으로 결과를 그룹화합니다.$firstN를 사용하여n: 3이 있는 각 장르에 대한 처음 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 영화를 반환합니다.