Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$sortByCount (estágio de agregação )

$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.

The $sortByCount stage has the following prototype form:

{ $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" }

Although you cannot specify a document literal for the group by expression, you can, however, specify a field or an expression that evaluates to a document. For example, if employee and business fields are document fields, then the following $mergeObjects expression, which evaluates to a document, is a valid argument to $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" } }

A partir do MongoDB 6.0, os estágios do pipeline que exigem mais de 100 megabytes de memória para execução gravam arquivos temporários no disco por padrão. Esses arquivos temporários duram durante a execução do pipeline e podem influenciar o espaço de armazenamento na sua instância. 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

Observação

For MongoDB Atlas, it is recommended to configure storage auto-scaling to prevent long-running queries from filling up storage with temporary files.

Se o Atlas cluster usar auto-scaling de armazenamento, os arquivos temporários podem fazer com que o cluster seja dimensionado para o próximo nível de armazenamento.

Para obter mais detalhes, consulte Limites do pipeline de agregação.

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:

db.exhibits.insertMany(
[
{ _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" ] }
]
)

The following operation unwinds the tags array and uses the $sortByCount stage to count the number of documents associated with each tag:

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 }
]