使用Mongo聚合框架对数组进行分组操作

时间:2012-09-20 06:07:59

标签: mongodb

我正在使用mongodb 2.2。我想使用新的聚合框架对我的文档进行查询,但元素是数组。

这是我的$ project结果的一个例子:

{ 
  "type" : [
      "ads-get-yyy",
      "ads-get-zzz"
  ],
  "count" : [
      NumberLong(0),
      NumberLong(10)
  ],
  "latency" : [
      0.9790918827056885,
      0.9790918827056885
  ]
}

我希望按类型进行分组,因此对于“ads-get-yyy”,要知道计数的平均值是多少,以及延迟的平均值是多少。

我希望有类似于下一个查询的东西,但它在每个数组的元素内部起作用:

db.test.aggregate(
{
  $project : {
    "type" : 1,
    "count" : 1,
    "latency" : 1
  }
},{
  $group : {
    _id: {type : "$type"},
    count: {$avg: "$count"},
    latency: {$avg: "$latency"}
  }
});

1 个答案:

答案 0 :(得分:1)

我也正在学习新的AF,但我认为您需要先$unwind这些类型,以便您可以按他们分组。如下所示:

db.test.aggregate({
  $project : {
    "type" : 1,
    "count" : 1,
    "latency" : 1
  }
},{
  $unwind : "$type"
},{
  $group : {
    _id: {type : "$type"},
    count: {$avg: "$count"},
    latency: {$avg: "$latency"}
  }
});