鉴于以下数据:
{
_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)
我将如何做到这一点?
答案 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)
使用mongodb聚合框架http://docs.mongodb.org/manual/core/aggregation/