2016-07-04 202 views
0

我在我的$项目后获得了下面的文档,但现在我需要找出交易的平均值。 下面是我的“$的项目”后的文件,前“$集团Mongodb中的聚合和组

{ 
    "name" : "AAA", 
    "transactions" : [ 
    { 
     "amount" : 500000 
    }, 
    { 
     "amount" : 12700000 
    }, 
    { 
     "amount" : 27500000 
    } 
    ] 
} 
{ 
"name" : "BBBB", 
"transactions" : [ 
    { 
     "amount" : 2500000 
    }, 
    { 
     "amount" : 5500000 
    }, 
    { 
     "amount" : 18000000 
    } 

] 
} 
{ 
    "name" : "CCCC", 
    "transactions" : [ 
     { 
     "amount" : 10000000 
     }, 
     { 
     "amount" : 5000000 
     }, 
     { 
     "amount" : 1000000 
     } 

    ] 
} 

我想是这样的。

{$group:{"_id":"$name", average:{$avg:"$transactions.amount"}}} 

我打印名称值_id场,但“平均”正在打印“空”

这里的输出我得到

{ "_id" : "AAA", "average" : null } 
{ "_id" : "BBB", "average" : null } 
{ "_id" : "CCC", "average" : null } 

我缺少什么?

回答

2

与你的问题$ group在聚合框架上的阶段,是没有什么可以总结出一个平均值。我的意思是,你正在解决“纯”的数组值问题,但是$ avg表达式不足以智能地总结数组的所有内容。你正试图获得整个数组的平均值。实现这一目标的正确方法是做一个$在前一阶段放松所以你有这样的

{ 
    "name" : "AAA", 
    "transactions" : {"amount" : 500000} 
} 
{ 
    "name" : "AAA", 
    "transactions" : {"amount" : 12700000} 
} 
{ 
    "name" : "AAA", 
    "transactions" : {"amount" : 27500000} 
} 
现在

文件,你可以做你的$组阶段应该像

{$group:{"_id":"$name", average:{$avg:"$transactions.amount"}}} 

这将为您在事务数组中包含的每个元素创建一个平均值,您可以在此之前为每个成员创建一个文档。

我想你是在mongo大学参加一个mongodb课程,祝你好运!