Osobiście stwierdziłem, że na dużych bazach danych (1TB i więcej) akceptowana odpowiedź jest strasznie powolna. Agregacja jest znacznie szybsza. Przykład jest poniżej:
db.places.aggregate(
{ $group : {_id : "$extra_info.id", total : { $sum : 1 } } },
{ $match : { total : { $gte : 2 } } },
{ $sort : {total : -1} },
{ $limit : 5 }
);
Wyszukuje dokumenty, których extra_info.id
jest używany dwa lub więcej razy, sortuje wyniki w kolejności malejącej danego pola i wyświetla pierwsze 5 jego wartości.