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

$top (축적자 연산자)

$top

지정된 정렬 순서에 따라 그룹 내 최상위 요소를 반환합니다.

참고

명확화

이 페이지에서는 축적자 사용되는 $top 에 대해 설명합니다. 축적자는 입력 문서 그룹 에서 애그리게이션된 단일 값을 반환합니다.

$setWindowFields 단계에서 $top (window function)를 사용하여 특정 창 문서에서 최상위 요소를 반환할 수도 있습니다.

{
$top:
{
sortBy: { <field1>: <sort order>, <field2>: <sort order> ... },
output: <expression>
}
}
필드
필요성
설명

sortBy

필수 사항

$sort와 유사한 구문을 사용하여 결과의 순서를 지정합니다.

출력

필수 사항

그룹의 각 요소에 대한 출력을 나타내며 모든 표현식이 될 수 있습니다.

점수 그룹에서 최상위 문서를 반환하는 다음 집계를 가정해 보겠습니다.

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

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

db.aggregate( [
{
$documents: [
{ playerId: "PlayerA", gameId: "G1", score: 1 },
{ playerId: "PlayerB", gameId: "G1", score: 2 },
{ playerId: "PlayerC", gameId: "G1", score: 3 },
{ playerId: "PlayerD", gameId: "G1"},
{ playerId: "PlayerE", gameId: "G1", score: null }
]
},
{
$group:
{
_id: "$gameId",
playerId:
{
$top:
{
output: [ "$playerId", "$score" ],
sortBy: { "score": 1 }
}
}
}
}
] )

이 예시에서는

  • $documents 플레이어 점수가 포함된 리터럴 문서를 생성합니다.

  • $group은 gameId 기준으로 문서를 그룹화합니다. 이 예시에는 gameId가 단 하나(G1)만 있습니다.

  • PlayerD 점수가 누락되었고 PlayerE에 null score가 있습니다. 이 값은 모두 null로 간주됩니다.

  • playerId 및 score 필드는 output : ["$playerId"," $score"]로 지정되고 배열 값으로 반환됩니다.

  • sortBy: { "score": 1 }로 정렬 순서를 지정합니다.

  • PlayerD 및 PlayerE가 동률로 상위 요소를 차지했습니다. PlayerD가 상위 score로 반환됩니다.

  • 여러 null 값에 대해 더 결정론적인 타이 브레이킹 동작을 수행하려면 sortBy 에 더 많은 필드를 추가합니다.

서로 다른 유형을 정렬할 때 BSON 데이터 유형 의 순서를 사용하여 순서를 결정합니다. 예를 들어 값이 문자열과 숫자로 구성된 컬렉션을 생각해 보겠습니다.

  • 오름차순 정렬에서는 문자열 값이 숫자 값 뒤에 정렬됩니다.

  • 내림차순 정렬에서는 문자열 값이 숫자 값보다 먼저 정렬됩니다.

이 예시에서는

  • PlayerA 의 점수는 정수입니다.

  • PlayerB 문자열 "2" 점수를 가집니다.

  • PlayerC 빈 문자열 점수가 있습니다.

정렬이 내림차순 { "score": -1 }로 이루어지므로 문자열 값은 PlayerA의 숫자 점수보다 먼저 정렬됩니다. $top는 정렬 후 첫 번째 요소인 PlayerB을 반환합니다.

db.aggregate( [
{
$documents: [
{ playerId: "PlayerA", gameId: "G1", score: 1 },
{ playerId: "PlayerB", gameId: "G1", score: "2" },
{ playerId: "PlayerC", gameId: "G1", score: "" }
]
},
{
$group:
{
_id: "$gameId",
playerId:
{
$top:
{
output: [ "$playerId", "$score" ],
sortBy: { "score": -1 }
}
}
}
}
] )

이 페이지의 예제에서는 sample_mflix 데이터 세트의 데이터를 사용합니다. 이 데이터 세트를 자체 관리형 MongoDB deployment 에 로드하는 방법에 대한 자세한 내용은 샘플 데이터 세트 로드를 참조하세요. 샘플 데이터베이스를 수정한 경우 이 페이지의 예제를 실행 하려면 데이터베이스를 삭제하고 다시 만들어야 할 수 있습니다.

$top 축적자 사용하여 장르에서 가장 높은 평점을 받은 영화를 찾을 수 있습니다.

db.movies.aggregate( [
{
$match: {
genres: "Comedy",
"imdb.rating": { $gt: 0 }
}
},
{
$group:
{
_id: "Comedy",
highestRatedMovie:
{
$top:
{
output: [ "$title", "$imdb.rating" ],
sortBy: { "imdb.rating": -1 }
}
}
}
}
] )

예시 파이프라인:

  • $match를 사용하여 IMDb 평점이 긍정적인 희극 영화를 필터하다 합니다.

  • $group를 사용하여 모든 희극 영화를 단일 "Comedy" 그룹 키 아래에 그룹 합니다.

  • output : ["$title", "$imdb.rating"]을 사용하여 $top에 출력되는 필드를 지정합니다.

  • sortBy: { "imdb.rating": -1 }를 사용하여 $top이 반환하는 영화를 결정하는 내림차순 IMDb 등급을 기준으로 그룹 내 영화의 순위를 지정합니다.

$top 축적자 사용하여 각 영화 평점 카테고리에서 가장 높은 평점을 받은 영화를 찾을 수 있습니다.

db.movies.aggregate( [
{
$match: {
rated: { $in: [ "G", "PG", "PG-13", "R" ] },
"imdb.rating": { $gt: 0 }
}
},
{
$group:
{
_id: "$rated",
highestRatedMovie:
{
$top:
{
output: [ "$title", "$imdb.rating" ],
sortBy: { "imdb.rating": -1 }
}
}
}
},
{
$sort: { _id: 1 }
}
] )

예시 파이프라인:

  • $match를 사용하여 G, PG, PG-13, R 카테고리에서 IMDb 평점이 긍정적인 영화를 필터하다 합니다.

  • $group를 사용하여 rated별로 결과를 그룹 합니다.

  • $top를 사용하여 각 카테고리에서 가장 높은 평점을 받은 영화를 반환합니다.

  • output : ["$title", "$imdb.rating"]을 사용하여 $top에 출력되는 필드를 지정합니다.

  • sortBy: { "imdb.rating": -1 }를 사용하여 각 그룹 내에서 영화의 내림차순으로 IMDb 등급을 매겨 $top이 반환하는 영화를 결정합니다.

  • $sort를 사용하여 등급 카테고리별로 결과를 알파벳순으로 정렬합니다.

이 페이지 평가하기