2011年4月10日日曜日

gmongoでグループ分けして集計する

gmongoでグループ分けして集計するには、以下のコードのようにgroupを使用します。

@Grab(group='com.gmongo', module='gmongo', version='0.7')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("192.168.1.25", 27017)
db = mongo.getDB("local")
db["stores"].drop()
// コレクションにオブジェクトを挿入する
col = db["stores"]
col.insert([country:"Japan", store:"store_A", sales:100])
col.insert([country:"Japan", store:"store_B", sales:120])
col.insert([country:"Japan", store:"store_C", sales:170])
col.insert([country:"United States", store:"store_D", sales:80])
col.insert([country:"United States", store:"store_E", sales:200])
col.insert([country:"United States", store:"store_F", sales:190])
col.insert([country:"United States", store:"store_G", sales:100])
// 国ごとの売上を取得する
for(obj in col.group(/* key */new BasicDBObject([country:true]),
/* condition */new BasicDBObject(),
/* initial */new BasicDBObject([csum:0]),
/* reduce */"function(obj,prev){prev.csum += obj.sales;}"
)){
println obj["country"] + ":" + obj.csum
}


動作環境
Groovy 1.7.8, JDK6 Update24, gmongo 0.7

関連情報
gmongoのウェブサイト
https://github.com/poiati/gmongo

groovyとMongoDBのまとめ

グループ毎の最小値・最大値を求める

0 件のコメント:

コメントを投稿