AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

$lastN (축적자 연산자)

$lastN

그룹 의 마지막 n 요소에 대해 지정된 표현식 평가한 결과를 반환합니다. 결과는 그룹화 단계에 대한 입력 데이터에 정의된 정렬 순서가 있는 경우에만 의미가 있습니다. 그룹 n개 미만의 요소가 포함된 경우 $lastN는 그룹 의 모든 요소를 반환합니다.

$lastN 축적자 다음 단계에서 사용할 수 있습니다.

참고

명확화

이 페이지에서는 축적자 사용되는 $lastN 에 대해 설명합니다. 축적자는 입력 문서 그룹 에서 합계, 최대값, 최소값과 같은 애그리게이션된 값을 반환합니다.

다음과 같은 다른 컨텍스트에서도 $lastN를 사용할 수 있습니다.

{
$lastN:
{
input: <expression>,
n: <expression>
}
}
필드
유형
설명

input

표현식

input 표현식 입력 그룹 의 각 문서 에 대해 평가되며 마지막 n 결과가 유지됩니다.

n

표현식

$lastN가 그룹 에서 반환하는 요소의 수입니다. 그룹 키를 기반으로 n을 동적으로 설정하는 예시 는 그룹 키 기반으로 n 설정하기를 참조하세요.

  • $lastN null 값을 필터링하지 않습니다.

  • $lastN 누락된 값을 null로 변환합니다.

$lastN 및 $bottomN를 사용하여 그룹 에서 마지막 n 요소를 반환할 수 있습니다. 그러나 각각을 사용하는 경우의 차이는 입력 문서가 이미 정렬되어 있는지 여부에 따라 달라집니다.

  • $group 에 들어오는 문서가 이미 주문된 경우 $lastN 을 사용해야 합니다.

  • 하단 n 요소를 정렬하고 선택하는 경우 $bottomN 를 사용하여 하나의 축적자로 두 작업을 모두 수행할 수 있습니다.

이 페이지의 예시에서는 sample_mflix 샘플 데이터 세트의 movies 컬렉션 사용합니다. 샘플 데이터 세트를 MongoDB deployment 에 로드하는 방법을 학습 보려면 Atlas 배포에 샘플 데이터 가져오기를 참조하세요.

$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 값을 동적으로 할당할 수 있습니다. 이 예시 에서 $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 영화를 반환합니다.

이 페이지 평가하기