문서 메뉴
문서 홈
/
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" } }

다음도 참조하세요.

MongoDB 6 부터 시작.0, 실행하는 데 100 메가바이트 이상의 메모리가 필요한 파이프라인 단계는 기본적으로 임시 파일을 디스크에 기록합니다. 이러한 임시 파일은 파이프라인이 실행되는 동안 지속되며 인스턴스의 저장 공간에 영향을 줄 수 있습니다. 이전 버전의 MongoDB에서는 이 동작을 활성화하려면 { allowDiskUse: true } 를 개별 findaggregate 명령에 전달해야 합니다.

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

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

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

참고

MongoDB Atlas의 경우, 장기 실행 쿼리로 인해 스토리지가 임시 파일로 채워지는 것을 방지하기 위해 스토리지 자동 확장을 구성 하는 것이 좋습니다.

Atlas 클러스터에서 스토리지 자동 확장을 사용하는 경우 임시 파일로 인해 클러스터가 다음 스토리지 계층으로 확장될 수 있습니다.

자세한 내용은 집계 파이프라인 제한을 참조하세요.

$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

다음

$unionWith

이 페이지의 내용