Som du kan se af den forespørgsel, du skrev, kræver denne type aggregering i 2.0, at du kører Map/Reduce. Map/Reduce på MongoDB har nogle præstationsstraffe, som er blevet dækket på SO før - Medmindre du er i stand til at parallelisere på tværs af en klynge, kommer du til at køre enkelttrådet javascript via Spidermonkey - ikke et hurtigt forslag. Indekset, da du ikke er selektiv, hjælper ikke rigtigt - du skal bare scanne hele indekset såvel som potentielt dokumentet.
Med den nært forestående udgivelse af 2.2 (i øjeblikket i rc1, da du skriver dette) har du dog nogle muligheder. aggregeringsramme (som er native, ikke JS-baseret Map/Reduce) introduceret i 2.2 har en indbygget gruppeoperatør og blev oprettet specifikt for at fremskynde denne form for operation i MongoDB.
Jeg vil anbefale at give 2,2 en chance og se, om din præstation på gruppering forbedres. Jeg tror, det ville se sådan ud (bemærk:ikke testet):
db.alarm.aggregate(
{ $group : {
_id : "$serverName",
count : { $sum : 1 }
}}
);