Quantcast
Channel: func09 » ruby on rails
Viewing all articles
Browse latest Browse all 10

[rails][mongoid] MongoidでMapReduce

$
0
0

メモです。

RailsでMongoidを試していろいろやっているのですが、SQLでGROUPとか使う系の処理は、Mongoidに備わっているgroupメソッドよりもmap_reduceメソッドの方が良さそうなのでした。

MapReduce
http://www.mongodb.org/display/DOCSJP/MapReduce#MapReduce-map%E3%83%95%E3%82%A1%E3%83%B3%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3

map_reduce method in Class: Mongo::Collection
http://api.mongodb.org/ruby/current/Mongo/Collection.html#map_reduce-instance_method

例えばPointというコレクションがあって、ユーザーごとのポイントを集計してソートしたいという場合、以下のようなコードで集計&ソートできました。

m =<<-EOT
function(){
  emit(this.user_id, {
    point: this.point
  });
}
EOT

r =<<-EOT
function(key, values){
  var sum = 0;
  values.forEach(function(value){
    sum += value.point;
  });
  return {
    point: sum
  };
}
EOT
Point.collection.map_reduce(m,r).find.sort('value.point', :desc)

慣れればもっと複雑なことができるんだろうけど、mongodb自体よくわかってないので・・。

ここを参考にしました: MongoDB, Mongoid and Map/Reduce
http://nsaunders.wordpress.com/2010/08/09/mongodb-mongoid-and-mapreduce/


Viewing all articles
Browse latest Browse all 10

Trending Articles