Seperti yang Anda lihat dari kueri yang Anda tulis, jenis agregasi ini di 2.0 mengharuskan Anda untuk menjalankan Peta/Kurangi. Map/Reduce di MongoDB memiliki beberapa penalti kinerja yang telah dibahas di SO sebelum - pada dasarnya kecuali Anda dapat memparalelkan di seluruh cluster, Anda akan menjalankan javascript berulir tunggal melalui Spidermonkey - bukan proposisi yang cepat. Indeks, karena Anda tidak selektif, tidak terlalu membantu - Anda hanya perlu memindai seluruh indeks serta kemungkinan dokumen.
Dengan rilis 2.2 yang akan segera terjadi (saat ini dalam rc1 pada saat penulisan ini), Anda memiliki beberapa opsi. kerangka kerja agregasi (yang asli, bukan Peta/Pengurangan berbasis JS) yang diperkenalkan pada 2.2 memiliki operator grup dan dibuat khusus untuk mempercepat operasi semacam ini di MongoDB.
Saya akan merekomendasikan mencoba 2.2 dan melihat apakah kinerja Anda dalam pengelompokan meningkat. Saya pikir itu akan terlihat seperti ini (catatan:tidak diuji):
db.alarm.aggregate(
{ $group : {
_id : "$serverName",
count : { $sum : 1 }
}}
);