$topN (Acumulador de Top N)
Última atualização: 2026-10-09
$topN (Acumulador de Top N)
$topN é um acumulador que retorna os N principais documentos (ou valores de expressão) por grupo conforme uma ordem de ordenação especificada, disponível desde o MongoDB 5.2. A ordem vem do sortBy de $group; n pode ser uma constante ou expressão. Ótimo para rankings e listas de topo por grupo.
| Categoria | Acumuladores |
|---|---|
| Versão do MongoDB | 5.2+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $group: { _id: <key>, topN: { $topN: { sortBy: { <field>: <1 or -1> }, output: <expression>, n: <number> } } } }
Retorno:Matriz dos N principais valores ou documentos por grupo
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $topN: os 3 melhores nomes por turma
db.scores.aggregate([
{ $group: { _id: '$class', top3: { $topN: { sortBy: { score: -1 }, output: '$name', n: 3 } } } }
])
Saída:
{ "_id": "A", "top3": ["Alice", "Bob", "Carol"] }
📌 Notas
- Exige MongoDB 5.2 ou posterior
- n aceita uma expressão, então pode ser dinâmico
- Empates em sortBy não têm ordem determinística no resultado
🏷️ Tags Relacionados
💡 Casos Relacionados
Mais casos práticos em breve.
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QO n de $topN pode ser uma variável?
ASim, n pode ser uma expressão que referencia um campo, por exemplo '$limitCount'.
QComo $topN difere de $sort seguido de $limit?
A$topN pega os N principais dentro de cada grupo; $sort seguido de $limit pega os N principais de todo o fluxo.
QComo os empates são tratados?
AElementos empatados ficam sem ordem; use uma chave de ordenação única para estabilidade.