如何使用Ruby计算Mongo中特定集合的字段中所有条目的平均值

时间:2013-04-10 18:21:36

标签: ruby mongodb

鉴于以下数据:

{
  _id: ObjectId("51659dc99d62eedc1a000001"),
  type: "image_search",
  branch: "qa_media_discovery_feelobot",
  time_elapsed: 19000,
  test: "1365613930 All Media",
  search_term: null,
  env: "delta",
  date: ISODate("2013-04-10T17:13:45.751Z")
}

我想运行如下命令:

avg_image_search_time = @coll.find("type" => "image_search").avg(:time_elapsed)

我将如何做到这一点?

2 个答案:

答案 0 :(得分:2)

我理解这方面的文档很难理解。

avg_image_search_time = @coll.aggregate([ {"$group" => {"_id"=>"$type", "avg"=> {"$avg"=>"$time_elapsed"}}}, {"$match" => {"_id"=>"image_search"}} ]).first['avg']

要解决这个问题:

我们正在按type字段对匹配进行分组,并为每种类型返回$avg time_elapsed。我们将结果平均值命名为avg。然后,在这些组中,仅筛选出_id匹配image_search的组。最后,由于aggregate总是返回一个数组,得到第一个结果(应该只有一个),并获取我们命名的avg字段。

答案 1 :(得分:1)