정의
그룹 내 마지막 n 개 요소에 대해 지정된 표현식을 평가한 결과를 반환합니다. 그룹 단계의 입력 데이터에 정의된 정렬 순서가 있는 경우에만 결과에 의미가 있습니다. 그룹에 n 개 미만의 요소가 포함된 경우 $lastN은 그룹의 모든 요소를 반환합니다.
$lastN 축적자는 다음 단계에서 사용할 수 있습니다.
참고
명확화
이 페이지에서는 $lastN을 축적자로 사용할 때에 대해 설명합니다. 축적자는 입력 문서 그룹에서 합계, 최대값 또는 최소값과 같은 집계된 값을 반환합니다.
$lastN를 다른 다음 문맥에서도 사용할 수 있습니다:
$lastN (expression), 배열의 끝에서부터 지정된 수의 요소를 반환합니다.$lastN (window function)는 특정 창의 문서에서 마지막n값을 반환하기 위해$setWindowFields단계에서 사용됩니다.
구문
{ $lastN: { input: <expression>, n: <expression> } }
옵션
필드 | 유형 | 설명 |
|---|---|---|
| 표현식 |
|
| 표현식 | The number of elements that |
행동
Null 및 누락된 값
$lastNnull 값을 필터링하지 않습니다.$lastN누락된 값을 null로 변환합니다.
$lastN과 $bottomN 비교
$lastN 및 $bottomN를 사용하여 그룹에서 마지막 n 개 요소를 반환할 수 있습니다. 그러나 각각을 사용하는 시기의 차이는 입력 문서가 이미 정렬되어 있는지 여부에 따라 달라집니다.
$group에 들어오는 문서가 이미 주문된 경우$lastN을 사용해야 합니다.하단
n요소를 정렬하고 선택하는 경우$bottomN를 사용하여 하나의 축적자로 두 작업을 모두 수행할 수 있습니다.
예시
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.
단일 장르의 마지막 3개 영화 찾기
특정 장르에서 최신 출시된 영화를 찾으려면 $lastN 축적자를 사용할 수 있습니다.
db.movies.aggregate( [ { $match: { genres: "Horror", year: { $type: "int" } } }, { $sort: { year: 1, title: 1 } }, { $group: { _id: "Horror", lastThreeMovies: { $lastN: { input: [ "$title", "$year" ], n: 3 } } } } ] )
이전 파이프라인:
$match를 사용하여Horror이genres배열에 포함되고year가 정수인 영화로 결과를 필터링합니다.결과를
year(을/를) 기준으로 오름차순으로 정렬하고, 그 다음에는 동순위 결정을 위해title(을/를) 기준으로 알파벳숫 순으로 정렬합니다.모든 결과 문서를 단일 그룹으로 그룹합니다.
input : ["$title", "$year"]을 사용하여$lastN에 입력되는 필드를 지정합니다.$lastN을(를) 사용하여n: 3이(가) 있는Horror장르에 대한 마지막 세 개의 문서를 반환합니다. (연도 오름차순으로 정렬하고title을(를) 동점 처리기로 사용합니다.)
여러 장르에서 마지막 3편의 영화 찾기
$lastN 축적자를 사용하여 각 장르에서 마지막 n 입력 필드를 찾을 수 있습니다.
db.movies.aggregate( [ { $match: { year: { $type: "int" } } }, { $unwind: "$genres" }, { $sort: { year: 1, title: 1 } }, { $group: { _id: "$genres", movies: { $lastN: { input: [ "$title", "$year" ], n: 3 } } } }, { $sort: { _id: 1 } }, { $limit: 5 } ] )
이전 파이프라인:
$match를 사용하여year이 정수인 영화를 필터링합니다.genres배열에서$unwind를 사용하여 각 장르별 별도 문서를 만들억니다.결과를
year(으)로 오름차순으로 정렬한 다음에는title(을)로 알패벳 정렬합니다.$group을 사용하여genres를 기준으로 결과를 그룹화합니다.$lastN을(를) 사용하여n: 3가(이) 포함된 각 장르에 대해 (title을(를) 동점 해결자로 사용하여 오름차순으로 정렬된 연도 기준)의 마지막 세 개의 문서를 반환합니다.input : ["$title", "$year"]을 사용하여$lastN에 입력되는 필드를 지정합니다.독자성을 향상시키기 위해 출력을 5개 문서로 제한합니다.
그룹 키를 기반으로 n 설정
그룹 키에 따라 n의 값을 동적으로 할당할 수 있습니다. 이 예시에서, $cond 표현식은 rated 필드를 사용하여 n의 값을 변경합니다:
db.movies.aggregate( [ { $match: { rated: { $in: [ "G", "PG", "PG-13", "R" ] }, year: { $type: "int" }, title: { $regex: "^[A-Za-z0-9]" } } }, { $sort: { title: 1 } }, { $group: { _id: { rated: "$rated" }, movies: { $lastN: { input: "$title", n: { $cond: { if: { $eq: ["$rated", "PG"] }, then: 3, else: 1 } } } } } }, { $sort: { "_id.rated": 1 } } ] )
이전 파이프라인:
year는 정수이고title는 영숫자 또는 숫자로 시작하는 경우에, 콘텐츠 등급이G,PG,PG-13또는R인 영화에 대한 필터.결과를
title을(를) 기준으로 알파베숫순으로 정렬합니다.영화를
rated로 분류합니다(내용 등급).$cond표현식을 사용하여PG등급 영화에 대해3개의 영화를 반환하고 모든 다른 등급에 대해1개의 영화를 반환합니다.
출력에서 PG 평점은 3 개의 영화를 반환하고, G, PG-13, R 평점은 각각 1 개의 영화를 반환합니다.