作成したクエリからわかるように、2.0でのこのタイプの集計では、Map/Reduceを実行する必要があります。 MongoDBのMap/Reduceには、SO 以前 でカバーされていたパフォーマンスペナルティがいくつかあります。 -基本的に、クラスター全体で並列化できない限り、Spidermonkeyを介してシングルスレッドのJavaScriptを実行することになります-迅速な提案ではありません。インデックスは選択的ではないため、実際には役に立ちません。インデックス全体と、場合によってはドキュメントをスキャンするだけです。
2.2の差し迫ったリリース(これを書いている時点で現在rc1にあります)では、いくつかのオプションがあります。 集約フレームワーク 2.2で導入された(ネイティブであり、JSベースのMap / Reduceではありません)には、グループ演算子 これは、MongoDBでのこの種の操作を高速化するために特別に作成されました。
2.2を試して、グループ化のパフォーマンスが向上するかどうかを確認することをお勧めします。次のようになると思います(注:テストされていません):
db.alarm.aggregate(
{ $group : {
_id : "$serverName",
count : { $sum : 1 }
}}
);