Friday, November 16, 2012

mmrd (MongoDB MapReduce Driver) リリースしました

MongoDBのMapReduceをNode.jsから実行/テストするためのモジュール、mmrdをリリースしました。

インストール

$ npm install mmrd

使い方

例えばMongoDBのワードカウントなどで、以下のようなMapReduceを書いていたとします。

// map.js
function map() {
  var words = this.text.split(' ');
  words.forEach(function(word) {
    emit(word, 1);
  });
}
//reduce.js
function reduce(key, values) {
  var result = 0;
  values.forEach(function(v) {
    result += v;
  });
  return result;
}

このとき、mmrdを使うと以下のような形でこのMapReduceをNode.jsから実行できます。

// runner.js
var mmrd = require('mmrd');

// map test
(function() {
  console.log("Word count / Map test");
  var doc = { text: "foo bar baz" };
  mmrd.loadMap('map.js');
  mmrd.map(doc, function(key, value) {
    console.log(key, ":", value);
  });
})();

// reduce test
(function() {
  console.log("Word count / Reduce test");
  mmrd.loadReduce('reduce.js');
  var key = "foo";
  var values = [1, 1];
  var reduced = mmrd.reduce(key, values);
  console.log(key, ":", reduced);
})();

// integration test
(function() {
  console.log("Word count / Integration test");
  var docs = [
    { text: "foo bar baz" },
    { text: "foo baz baz"}
  ];
  mmrd.loadMap('map.js');
  mmrd.loadReduce('reduce.js');
  var result = mmrd.mapReduce(docs);
  console.log(result);
})();
起動
$ node runner.js

もちろん、mochaやshouldを使ったテストも書けます。当たり前ですが。

お試しあれ。