정의
$maxN 축적자 다음 단계에서 사용할 수 있습니다.
참고
$maxN의 다른 용도
이 페이지에서는 축적자 사용되는 $maxN 에 대해 설명합니다. 축적자는 입력 문서 그룹 에서 합계, 최대값, 최소값과 같은 애그리게이션된 값을 반환합니다.
다음과 같은 다른 컨텍스트에서도 $maxN를 사용할 수 있습니다.
$maxN (expression)는 배열 에서 가장 큰n값을 반환합니다.$maxN (window function)는$setWindowFields단계에서 특정 창 문서에서 가장 큰n값을 반환하는 데 사용됩니다.
구문
{ $maxN: { input: <expression>, n: <expression> } }
필드 | 유형 | 설명 |
|---|---|---|
| 표현식 | 그룹 의 각 요소에 대해 평가된 표현식 . |
| 표현식 |
|
행동
결과 유형
$maxN이(가) 서로 다른 유형의 값을 비교할 때 유형의 순서는 BSON 비교 순서를 따릅니다.
Null 및 누락된 값
$maxN null 및 누락된 값을 필터링합니다.
다음 집계 $maxN이 null 및 누락된 값을 처리하는 방법을 보여줍니다.
db.aggregate( [ { $documents: [ { title: "Fight Club", genre: "Drama", rating: 8.9 }, { title: "The Matrix", genre: "Drama", rating: 8.7 }, { title: "The Green Mile", genre: "Drama", rating: 8.5 }, { title: "Magnolia", genre: "Drama" }, { title: "Dogma", genre: "Drama", rating: null } ] }, { $group: { _id: "$genre", topFourRatings: { $maxN: { input: "$rating", n: 4 } } } } ] )
[ { _id: 'Drama', topFourRatings: [ 8.9, 8.7, 8.5 ] } ]
이 예시에서는
$documents영화 등급이 포함된 리터럴 문서를 만듭니다.$group은genre기준으로 문서를 그룹화합니다. 이 예시에는genre가 단 하나(Drama)만 있습니다.Magnolia누락된rating이(가) 있고Dogma에 nullrating이(가) 있습니다. 두 값 모두 필터링됩니다.3 문서에만 유효한 등급이 있으므로,
$maxN는n = 4이더라도 3 값을 반환합니다.
$maxN 축적자와 $topN 축적자의 비교
$maxN 또는 $topN를 사용하여 그룹 에서 가장 순위가 높은 n 요소를 반환할 수 있습니다. 둘 사이의 선택은 입력 문서가 이미 정렬되어 있는지 여부에 따라 달라집니다.
입력 문서가 이미 정렬된 경우
$maxN를 사용하여 최대n값을 반환합니다.상위
n요소를 동시에 정렬하고 선택해야 하는 경우$topN를 사용하여 단일 축적자 이 두 가지를 모두 수행할 수 있습니다.
예시
이 페이지의 예제에서는 sample_mflix 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB deployment 에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예제를 실행 하려면 데이터베이스를 삭제하고 다시 만들어야 할 수 있습니다.
한 해 동안 평점이 가장 높은 영화 3편 찾기
$maxN 축적자 사용하여 한 해 동안 개봉한 영화에 대한 가장 높은 IMDb 등급 3개를 찾을 수 있습니다.
db.movies.aggregate( [ { $match: { year: 1999, "imdb.rating": { $exists: true } } }, { $group: { _id: 1999, topThreeRatings: { $maxN: { input: "$imdb.rating", n: 3 } } } } ] )
이전 파이프라인:
$match를 사용하여imdb.rating필드 있는1999에서 개봉한 영화를 필터하다 합니다.일치하는 모든 문서를
_id: 1999을(를) 사용하여 단일 그룹 으로 그룹화합니다."$imdb.rating"을$maxN의input로 지정합니다.$maxN를 사용하여n: 3이 있는 가장 높은 평점 3개를 반환합니다.
여러 해 동안 가장 높은 평점을 받은 영화 3편 찾기
$maxN 축적자 사용하여 설정하다 별로 각 연도별 최고 평점 영화 3편을 찾을 수 있습니다.
db.movies.aggregate( [ { $match: { year: { $in: [ 1999, 2000, 2001 ] }, "imdb.rating": { $exists: true } } }, { $group: { _id: "$year", topThreeRatings: { $maxN: { input: "$imdb.rating", n: 3 } } } }, { $sort: { _id: 1 } } ] )
이전 파이프라인:
그룹 키를 기반으로 n 설정
그룹 키를 기반으로 n 값을 동적으로 할당할 수 있습니다. 이 예시 에서 $cond 표현식 year 필드 사용하여 n 값을 변경합니다.
db.movies.aggregate( [ { $match: { year: { $in: [ 1999, 2000, 2001 ] }, "imdb.rating": { $exists: true } } }, { $group: { _id: { year: "$year" }, topRatedMovies: { $maxN: { input: "$imdb.rating", n: { $cond: { if: { $eq: [ "$year", 2001 ] }, then: 3, else: 1 } } } } } }, { $sort: { "_id.year": 1 } } ] )
이전 파이프라인:
1999,2000또는2001에서 개봉되었으며imdb.rating필드 있는 영화에 대한 필터입니다.영화를
year별로 그룹화합니다.$cond표현식 사용하여2001연도에 대한3등급을 반환하고 다른 모든 연도에 대해서는1등급을 반환합니다.
출력에서 2001은 3개의 평가를 반환하고 1999 및 2000는 각각 1개의 평가를 반환합니다.