Mongodb中的聚合和组

时间:2016-07-04 01:09:44

标签: mongodb

我在我的$项目之后得到了以下文档,但现在我需要找出交易的平均值。 以下是我的' $ project'之前的文件,' $ group'

{
  "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字段中打印名称值,但是'平均值'正在打印' null'

这是我得到的输出

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

我错过了什么?

1 个答案:

答案 0 :(得分:2)

聚合框架上的 $ group 阶段的问题在于,没有什么可以总结来做出平均值。我的意思是,你正在为纯粹的"值数组,但$ avg表达式不够智能,无法总结数组的所有内容。您试图获得整个阵列的平均值。实现这一目标的正确方法是在前一阶段进行 $ unwind ,以便获得这样的文档

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

现在,您可以执行类似

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

这将使您在展开的事务数组中包含的每个元素的平均值为每个成员提供一个文档。

我认为你正在参加mongo大学的mongodb课程,祝你好运!