문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

$sortByCount (aggregation)

이 페이지의 내용

  • 정의
  • 고려 사항
  • 행동
  • 예제
$sortByCount

지정된 표현식의 값을 기준으로 들어오는 문서를 그룹화한 다음 각 고유 그룹의 문서 수를 계산합니다.

각 출력 문서에는 두 개의 필드가 있습니다. 하나는 고유한 그룹화 값을 포함하는 _id 필드이고 다른 하나는 해당 그룹화 또는 범주에 속하는 문서 수를 포함하는 count 필드입니다.

문서는 내림차순으로 count 을(를) 통해 정렬됩니다.

$sortByCount 단계의 프로토타입 형식은 다음과 같습니다.

{ $sortByCount: <expression> }
필드
설명
expression

그룹화할 표현식 입니다. 문서 리터럴을 제외한 모든 표현식을 지정할 수 있습니다.

필드 경로를 지정하려면 필드 이름 앞에 달러 기호 $ 를 붙이고 따옴표로 묶습니다. 예를 들어 필드를 기준으로 employee 그룹화하려면 "$employee" 표현식을 지정합니다.

{ $sortByCount: "$employee" }

그룹화 표현식에 문서 리터럴을 지정할 수는 없지만 문서로 평가되는 필드나 표현식은 지정할 수 있습니다. 예를 들어 employeebusiness 필드가 문서 필드인 경우 문서로 평가되는 다음 $mergeObjects 표현식은 $sortByCount 에 대한 유효한 인수입니다.

{ $sortByCount: { $mergeObjects: [ "$employee", "$business" ] } }

그러나 문서 리터럴 표현식을 사용한 다음 예는 유효하지 않습니다.

{ $sortByCount: { lname: "$employee.last", fname: "$employee.first" } }

다음도 참조하세요.

$sortByCount 는 100메가바이트의 메모리 사용 제한을 받지만, 필요한 경우 추가 공간을 위해 임시 파일을 디스크에 쓸 수 있습니다.

MongoDB 6.0부터는 실행에 100메가바이트 이상의 메모리가 필요한 파이프라인 단계는 기본적으로 임시 파일을 디스크에 기록합니다. MongoDB의 이전 버전에서는 이 동작을 활성화하려면 개별 findaggregate 명령에 { allowDiskUse: true } 를 전달해야 합니다.

개별 findaggregate 명령은 다음 방법 중 하나를 통해allowDiskUseByDefault 매개변수를 재정의할 수 있습니다:

  • 1}이 로 설정된 경우 을 사용하여 임시 파일을 디스크에 쓰는 것을 허용합니다.{ allowDiskUse: true } allowDiskUseByDefault false

  • 1}이 로 설정된 경우 을 사용하여 임시 파일을 디스크에 쓰는 것을 금지합니다.{ allowDiskUse: false } allowDiskUseByDefault true

다음도 참조하세요.

$sortByCount 단계는 다음 $group + $sort 시퀀스와 동일합니다.

{ $group: { _id: <expression>, count: { $sum: 1 } } },
{ $sort: { count: -1 } }

다음 문서가 포함된 exhibits 컬렉션을 생각해 보세요.

{ "_id" : 1, "title" : "The Pillars of Society", "artist" : "Grosz", "year" : 1926, "tags" : [ "painting", "satire", "Expressionism", "caricature" ] }
{ "_id" : 2, "title" : "Melancholy III", "artist" : "Munch", "year" : 1902, "tags" : [ "woodcut", "Expressionism" ] }
{ "_id" : 3, "title" : "Dancer", "artist" : "Miro", "year" : 1925, "tags" : [ "oil", "Surrealism", "painting" ] }
{ "_id" : 4, "title" : "The Great Wave off Kanagawa", "artist" : "Hokusai", "tags" : [ "woodblock", "ukiyo-e" ] }
{ "_id" : 5, "title" : "The Persistence of Memory", "artist" : "Dali", "year" : 1931, "tags" : [ "Surrealism", "painting", "oil" ] }
{ "_id" : 6, "title" : "Composition VII", "artist" : "Kandinsky", "year" : 1913, "tags" : [ "oil", "painting", "abstract" ] }
{ "_id" : 7, "title" : "The Scream", "artist" : "Munch", "year" : 1893, "tags" : [ "Expressionism", "painting", "oil" ] }
{ "_id" : 8, "title" : "Blue Flower", "artist" : "O'Keefe", "year" : 1918, "tags" : [ "abstract", "painting" ] }

다음 작업은 unwinds tags 배열을 만들고 $sortByCount 단계를 사용하여 각 태그와 연결된 문서 수를 계산합니다.

db.exhibits.aggregate( [ { $unwind: "$tags" }, { $sortByCount: "$tags" } ] )

이 작업은 개수를 기준으로 내림차순으로 정렬된 다음 문서를 반환합니다.

{ "_id" : "painting", "count" : 6 }
{ "_id" : "oil", "count" : 4 }
{ "_id" : "Expressionism", "count" : 3 }
{ "_id" : "Surrealism", "count" : 2 }
{ "_id" : "abstract", "count" : 2 }
{ "_id" : "woodblock", "count" : 1 }
{ "_id" : "woodcut", "count" : 1 }
{ "_id" : "ukiyo-e", "count" : 1 }
{ "_id" : "satire", "count" : 1 }
{ "_id" : "caricature", "count" : 1 }
← $sort (aggregation)

이 페이지의 내용