Jak widać z zapytania, które napisałeś, ten typ agregacji w wersji 2.0 wymaga uruchomienia Map/Reduce. Mapa/Zmniejsz w MongoDB ma pewne kary za wydajność, które zostały uwzględnione w SO przed - w zasadzie, jeśli nie jesteś w stanie zrównoleglać się w klastrze, będziesz uruchamiał jednowątkowy javascript za pośrednictwem Spidermonkey - nie jest to szybka propozycja. Indeks, ponieważ nie jesteś selektywny, tak naprawdę nie pomaga - wystarczy zeskanować cały indeks, a także potencjalnie dokument.
Z rychłym wydaniem 2.2 (obecnie w rc1 w momencie pisania tego) masz jednak kilka opcji. struktura agregacji (który jest natywny, nie oparty na JS Map/Reduce) wprowadzony w 2.2 ma wbudowany operator grupy i został stworzony specjalnie w celu przyspieszenia tego rodzaju operacji w MongoDB.
Polecam dać 2,2 strzału i zobaczyć, czy poprawi się twoja wydajność w grupowaniu. Myślę, że wyglądałoby to mniej więcej tak (uwaga:nie testowano):
db.alarm.aggregate(
{ $group : {
_id : "$serverName",
count : { $sum : 1 }
}}
);