2016-08-01 5 views
0

私は、そのドキュメントの「ネストされた値」を合計して平均化する方法を探していました。私はユーザーの子供の数を平均化することに興味があります。 これらの行は私に0の結果を与えました。ネストされた値を平均化する

db.getCollection('users').aggregate([ 
    { 
$group: { 
    _id: "id", 
    Mean: { 
     $avg: "$data.details.MemberDetails.numberOfKids" 
    } 
    } 
}]) 

私はstackoverflowの中で、ここでいくつかの質問を読んでいると、私のデータは、オブジェクト に位置する配列に位置したオブジェクトに位置している問題は、これは、データがどのように見えるかです。 助けが役に立ちます。おかげさまで

/* 1 */ 
{ 
>  "_id" : "160b2af1fdf06daf3", 
>  "userId" : "943af0fa65da28a4", 
>  "data" : { 
>   "details" : [ 
>    { 
>     "MemberDetails" : { 
>     
>       "numberOfKids" : 3, 
>       "Statuse" : "married", 
>     
>      }, 
>      "MemberDescroption" : { 
>       "hight" : 1.80, 
>       "wight" : 85, 
>      } 
>     } 
>    ] 
>    } 
> 
> } 

答えて

2

あなたは$unwindパイプライン演算子を使用、ドキュメントをグループ化する前に、最初の配列をフラット化する必要があります。

db.getCollection('users').aggregate([ 
    { "$unwind": "$data.details" }, 
    { 
     "$group": { 
      "_id": "id", 
      "Mean": { 
       "$avg": "$data.details.MemberDetails.numberOfKids" 
      } 
     } 
    } 
]) 
+0

こんにちは、迅速な応答をありがとう。 私は次のエラーを取得しています \t "errmsg": "例外:認識できないパイプラインステージ名: '$ uniwnd'"、 –

+0

@NatiBarchilon '' $ unwind''の代わりに '' $ uniwnd''を書いていました。もう一度お試しください。また、[** '$ unwind' **](https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/#pipe._S_unwind)のドキュメントを確認することを忘れないでください。 – chridam

+1

ありがとう、気づかなかった! これを合計すると、同じことをやり直すことになります。もう一度感謝します。 –

関連する問題