2016-08-01 159 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

谢谢,没有注意到它! 所以总结我会做同样的,再次感谢。 –