정의
그룹 의 마지막 n 요소에 대해 지정된 표현식 평가한 결과를 반환합니다. 결과는 그룹화 단계에 대한 입력 데이터에 정의된 정렬 순서가 있는 경우에만 의미가 있습니다. 그룹 n개 미만의 요소가 포함된 경우 $lastN는 그룹 의 모든 요소를 반환합니다.
$lastN 축적자 다음 단계에서 사용할 수 있습니다.
참고
명확화
이 페이지에서는 축적자 사용되는 $lastN 에 대해 설명합니다. 축적자는 입력 문서 그룹 에서 합계, 최대값, 최소값과 같은 애그리게이션된 값을 반환합니다.
다음과 같은 다른 컨텍스트에서도 $lastN를 사용할 수 있습니다.
$lastN (expression)배열 의 끝에서 지정된 수의 요소를 반환합니다.$lastN (window function)는$setWindowFields단계에서 특정 창 문서에서 마지막n값을 반환하는 데 사용됩니다.
구문
{ $lastN: { input: <expression>, n: <expression> } }
옵션
필드 | 유형 | 설명 |
|---|---|---|
| 표현식 |
|
| 표현식 |
|
행동
Null 및 누락된 값
$lastNnull 값을 필터링하지 않습니다.$lastN누락된 값을 null로 변환합니다.
$lastN과 $bottomN 비교
$lastN 및 $bottomN를 사용하여 그룹 에서 마지막 n 요소를 반환할 수 있습니다. 그러나 각각을 사용하는 경우의 차이는 입력 문서가 이미 정렬되어 있는지 여부에 따라 달라집니다.
$group에 들어오는 문서가 이미 주문된 경우$lastN을 사용해야 합니다.하단
n요소를 정렬하고 선택하는 경우$bottomN를 사용하여 하나의 축적자로 두 작업을 모두 수행할 수 있습니다.
예시
이 페이지의 예시에서는 sample_mflix 샘플 데이터 세트의 movies 컬렉션 사용합니다. 샘플 데이터 세트를 MongoDB deployment 에 로드하는 방법을 학습 보려면 Atlas 배포에 샘플 데이터 가져오기를 참조하세요.
단일 장르의 마지막 영화 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기준으로 오름차순으로 정렬한 다음, 타이 브레이커(tiebreaker)로 알파벳순으로title기준으로 정렬합니다.모든 결과 문서를 단일 그룹 으로 그룹화합니다.
input : ["$title", "$year"]을 사용하여$lastN에 입력되는 필드를 지정합니다.$lastN를 사용하여Horror장르에 대한 마지막 3개의 문서(연도 오름차순으로 정렬,title을 타이 브레이커로 사용)를n: 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이 정수인 영화로 필터하다 합니다.$unwind를 사용하여genres배열 의 각 장르에 대해 별도의 문서 생성합니다.결과를
year기준으로 오름차순으로 정렬한 다음title기준으로 알파벳순으로 정렬합니다.$group을 사용하여genres를 기준으로 결과를 그룹화합니다.$lastN를 사용하여 각 장르에 대한 마지막 3개의 문서(연도 오름차순,title을 타이 브레이커로 사용)를n: 3로 반환합니다.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 } } ] )
이전 파이프라인:
콘텐츠 등급이
G,PG,PG-13또는R인 영화를 필터링하며, 여기서year는 정수이고title는 영숫자로 시작합니다.결과를
title을 기준으로 알파벳순으로 정렬합니다.rated(콘텐츠 등급)별로 영화를 그룹화합니다.$cond표현식 사용하여PG등급 영화에 대해3영화를 반환하고 다른 모든 등급에 대해1영화를 반환합니다.
출력에서 PG 평가는 3 영화를 반환하고, G, PG-13 및 R 평가는 각각 1 영화를 반환합니다.