4

私は質問のコレクションを持っています。各プロファイルには多くの質問があります。

{"_id":"..." , "pid":"...",.....}

mongo DBの新しい集計フレームワークを使用して、プロファイルごとの平均質問数を計算するにはどうすればよいですか?

次のことを試してみましたが成功しませんでした:

{ "aggregate" : "question" , "pipeline" : [ { "$group" : { "_id" : "$pid" , "qCount" : { "$sum"    : 1}}} , { "$group" : { "qavg" : { "$avg" : "qCount"} , "_id" :  null }}]}

グループオペレーター1人だけでできますか?

ありがとう。

4

1 に答える 1

12

このためには、質問の量と、さまざまなプロファイルの量を知る必要があります (「pid」で一意に識別されると思います)。集約フレームワークでは、次の 2 つの段階でそれを行う必要があります。

  • まず、PID ごとの質問数を計算します
  • 次に、PID ごとの質問の平均を計算します

次のようにします。

第一歩:

db.profiler.aggregate( [
    { $group: { _id: '$pid', count: { '$sum': 1 } } },
] );

どの出力(私の場合、いくつかのサンプルデータを使用):

{
    "result" : [
        { "_id" : 2, "count" : 7 },
        { "_id" : 1, "count" : 1 },
        { "_id" : 3, "count" : 3 },
        { "_id" : 4, "count" : 5 }
    ],
    "ok" : 1
}

私はそれぞれ 7、1、3、または 5 つの質問を持つ 4 つのプロファイルを持っています。

この結果で、別のグループを実行しますが、この場合、実際には何もグループ化したくありません。したがって、以下の 2 番目のグループに示すように、_id値をnullに設定する必要があります。

db.profiler.aggregate( [
    { $group: { _id: '$pid', count: { '$sum': 1 } } },
    { $group: { _id: null, avg: { $avg: '$count' } } }
] );

そして、これは出力します:

{
    "result" : [
        { "_id" : null, "avg" : 4 }
    ], 
    "ok" : 1
}

これは、プロファイルごとに平均で 4 つの質問があることを示しています。

于 2013-07-13T17:56:37.777 に答える