Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$sortByCount (agregação)

Nesta página

  • Definição
  • Considerações
  • Comportamento
  • Exemplo
$sortByCount

Agrupa documentos recebidos com base no valor de uma expressão especificada e, em seguida, calcula a contagem de documentos em cada grupo distinto.

Cada documento de saída contém dois campos: um campo _id contendo o valor de agrupamento distinto e um campo count contendo o número de documentos pertencentes a esse agrupamento ou categoria.

Os documentos são ordenados por count em ordem decrescente.

O estágio $sortByCount tem o seguinte formato de protótipo:

{ $sortByCount: <expression> }
Campo
Descrição
expression

Agrupamento por expressão. Você pode especificar qualquer expressão, exceto um literal de documento.

Para especificar um caminho do campo, prefixe o nome do campo com um cifrão $ e coloque-o entre aspas. Por exemplo, para agrupar pelo campo employee, especifique "$employee" como a expressão.

{ $sortByCount: "$employee" }

Embora não seja possível especificar um literal de documento para a agrupar por expressão, você pode, no entanto, especificar um campo ou uma expressão que seja avaliado como um documento. Por exemplo, se os campos employee e business forem campos de documento, a seguinte expressão $mergeObjects , que avalia para um documento, é um argumento válido para $sortByCount:

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

No entanto, o exemplo a seguir com a expressão literal de documento é inválido:

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

Dica

Veja também:

$sortByCount está sujeito ao limite de uso de memória de 100 megabytes, mas é capaz de escrever arquivos temporários no disco se for necessário espaço adicional.

A partir do MongoDB 6.0, estágios de pipeline que exigem mais de 100 megabytes de memória para executar arquivos temporários de gravação em disco por padrão. Em versões anteriores do MongoDB, você deve passar { allowDiskUse: true } para find individuais e comandos aggregate para habilitar esse comportamento.

Somente find e aggregate comandos podem substituir o parâmetro allowDiskUseByDefault por um ou outro:

  • Usando { allowDiskUse: true } para permitir a gravação de arquivos temporários no disco quando allowDiskUseByDefault estiver definido como false

  • Usando { allowDiskUse: false } para proibir a gravação de arquivos temporários no disco quando allowDiskUseByDefault estiver definido como true

O estágio $sortByCount é equivalente à seguinte sequência $group + $sort :

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

Considere uma coleção exhibits com os seguintes documentos:

{ "_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" ] }

A operação a seguir unwinds a array tags e usa o estágio $sortByCount para contar o número de documentos associados a cada marcação:

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

A operação retorna os seguintes documentos, ordenados em ordem decrescente por contagem:

{ "_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 (agregação)