MonogoDB rubyドライバの不思議


これでMapReduceをすると、おかしなデータが出てくる

    map = "function () {" +
            "emit({pre:this.key1, post:this.key2}, {count:1});" +
          "}"

    reduce = "function (key, val) {" +
                "var sum = 0;" +
                "for (var i = 0; i < val.length; i++) {" +
                    "sum += 1;" +
                "}" +
                "return {count:sum};" +
             "}"
    @res = @col.map_reduce(map, reduce)

けれども、これ↓だとちゃんとしたデータになる。

     map = "function () {" +
            "emit({pre:this.key1, post:this.key2}, 1);" +
          "}"
    reduce = "function (key, vals) {" +
                "var sum = 0;" +
                "for (var i in vals) {" +
                    "sum += vals[i];" +
                "}" +
                "return sum" +
             "}"
    @res = @col.map_reduce(map, reduce)

理由はわからない。
Reduceでは。for ~ in を使った方が良いみたいです。
ちなみにMongoDBのShell上で行うと、両方共ちゃんとデータが出てきている気がしています。

Leave a Reply