2013-04-10 46 views
3

計算所有條目的平均在字段中給出以下數據:如何從一個特定集合中蒙戈使用Ruby

{ 
    _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

我理解的文檔上,這是一種難以效仿。

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

要打破下來:

我們對type場分組比賽,並返回TIME_ELAPSED每種類型的$avg。我們將得到的平均名稱命名爲avg。然後,在這些組中,只篩選出組_id匹配image_search的組。最後,因爲aggregate總是返回一個數組,所以得到第一個結果(應該只有一個),並且抓住我們命名的avg字段。

+0

謝謝我測試它,它像一個魅力工作,我一直試圖做這個爲期3天沒有成功。對於mongo而言,嘗試在文檔中尋求幫助真的很艱鉅。你這個人! – feelobot 2013-04-10 21:06:34