2011年11月14日月曜日

gmongoでMapReduceを使用して配列フィールドの値をカウントする

gmongoでMapReduceを使用して配列フィールドの値をカウントするには、以下のコードを実行します。
@Grab(group='com.gmongo', module='gmongo', version='0.8')
import com.mongodb.*
import com.gmongo.*

mongo = new GMongo("localhost", 27017)
db = mongo.getDB("local")
db["articles"].drop()
// コレクションにオブジェクトを挿入する
col = db["articles"]
col.insert([url:"http://www.foo.com", tags:["groovy", "java"]])
col.insert([url:"http://www.bar.com", tags:["PHP"]])
col.insert([url:"http://www.baz.com", tags:["groovy"]])
// MapReduceでタグ毎の記事数を取得
println col.mapReduce(
  /* map */ """function(){
    for(var tl=0;tl<this.tags.length;tl++){
      emit(this.tags[tl], {count:1});
    }
  }""",
  /* reduce */ """function(key, values){
    var total = 0;
    for(var vi = 0;vi<values.length;vi++){
      total += values[vi].count;
    }
    return {count: total};
  }""",
  /* outputTarget */"mr_result",
  /* query */ new BasicDBObject()
)
// 結果を表示
db.mr_result.find().each {
  println it
}

動作環境
Groovy 1.8.0, JDK6 Update22, gmongo 0.8, MongoDB 2.0

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

groovyとMongoDBのまとめ

0 件のコメント:

コメントを投稿