2016-06-24 8 views
2

コレクションのフィールドには、ステータスのコレクションがあります。ステータスはarrayIndex形式です。採取試料示すように、私はこのフォーマットを引き起こすたい計算した後 enter image description here私は平均0、1を計算する必要が 、および2を以下のようにMongoDBを使って単一フィールドの平均を計算する方法は?

{ 
    "result": [ 
    { 
     "0": 18, 
     "1": 58, 
     "2": 24 
    } 
    ] 
} 

はそれが可能上記の形式で結果を作ることです以下の。はいの場合は平均を計算する方法を教えてください。

+0

平均か?ステータスカウントのうち? – chridam

+0

@chridam in status私はNumberInt(0)、NumberInt(1)、NumberInt(2)の平均を計算します。 –

+0

上記の2つのサンプル文書があるので、 – chridam

答えて

2

所与のアレイに、第一、第二及び第三の状態の平均値を取得する集計演算を実行するためのMongoDBシェルクエリは次のものの

var pipeline = [ 
    { 
     "$match": { 
      "Status.0": { $exists: true }, 
      "Status.1": { $exists: true }, 
      "Status.2": { $exists: true } 
     } 
    }, 
    { "$unwind": "$Status" }, 
    { 
     "$match": { 
      "Status.0": { $exists: true }, 
      "Status.1": { $exists: true }, 
      "Status.2": { $exists: true } 
     } 
    }, 
    { 
     "$group": { 
      "_id": null, 
      "0": { "$avg": "$Status.0" }, 
      "1": { "$avg": "$Status.1" }, 
      "2": { "$avg": "$Status.2" } 
     } 
    } 
] 

db.status.aggregate(pipeline); 
+0

あなたは有名です...ありがとうございます –

+0

@chirdamなぜ私は$ unwindを使用しているのですか? –

+0

[** '$ unwind' **](https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/#pipe._S_unwind)演算子は、リストデータに適用されているのでフィールドには、アンワインドが適用されるリスト・データ・フィールドのすべての要素ごとに新しいレコードが生成されます。これは基本的にデータを平坦化して、前のパイプラインで単一のドキュメントとして処理できるようにします。 – chridam

関連する問題