2016-08-01 119 views
0

我正在尋找一種在該文檔中求和和平均「嵌套值」的方法。我對平均用戶的孩子數量感興趣。 這些行給了我0的結果。平均嵌套值

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

我在這裏計算器讀了一些問題,我的數據位於多數民衆贊成位於它位於一個對象 數組對象的問題,這是數據的樣子。 任何幫助將是有用的。 謝謝。

/* 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感謝您注意到錯字;寫了''$ uniwnd''而不是'$ unwind''。再試一次,不要忘記檢查[**'$ unwind' **]的文檔(https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/#pipe._S_unwind)。 – chridam

+1

謝謝,沒有注意到它! 所以總結我會做同樣的,再次感謝。 –