Eu pessoalmente descobri que em grandes bancos de dados (1 TB e mais) a resposta aceita é terrivelmente lenta. A agregação é muito mais rápida. Exemplo está abaixo:
db.places.aggregate(
{ $group : {_id : "$extra_info.id", total : { $sum : 1 } } },
{ $match : { total : { $gte : 2 } } },
{ $sort : {total : -1} },
{ $limit : 5 }
);
Ele procura documentos cujo
extra_info.id
é usado duas ou mais vezes, classifica os resultados em ordem decrescente de um determinado campo e imprime os primeiros 5 valores dele.