Em um SGBD SQL padrão, isso seria feito com a seguinte consulta:
SELECT type, count(*) as ct FROM table GROUP BY type ORDER BY ct;
no mongodb isso seria feito usando a função group, embora seja um pouco mais complicado:
db.collection.group(
{key: { "type":true},
reduce: function(obj,prev) { prev.count += 1; },
initial: { count: 0 }
});
Aqui estou pedindo ao banco de dados para retornar valores para a chave "tipo" (daí o "verdadeiro") e, para cada valor, a função de redução fornecida será usada para agregar os registros encontrados. Aqui estou apenas atualizando uma contagem de quantas vezes cada registro aparece. Se você executar esta consulta, obterá algo assim:
[
{
"type" : "report",
"count" : 5
},
{
"type" : "memo",
"count" : 15
}
{
"type" : "research",
"count" : 3
}
]
Você notará que isso não é ordenado; até mesmo os documentos do mongodb dizem que a maneira mais fácil de fazer o pedido é fazê-lo no lado do cliente.
A documentação relevante está aqui .