0

私はmongodbsmapreduceを初めて使用しますが、今のところ完全には理解していません。そして、私は問題を抱えています。それは私が成功せずに数日間解決しようとします。

タグフィールドのある投稿のコレクションがあります。次に、タグの新しいコレクションをmapreduceします。すべてのタグには、この1つの特定のタグが割り当てられているすべての投稿IDの配列があります。

これを行うための私の試みの1つ(これは正しく行われません)

m = function() {
    for (var i in this.tags) {
    emit(this.tags[i], {"ids" : [this._id]});
};
}

r = function(key, emits) {
var total = {ids : []}
for (var i in emits) {
    emits[i].ids.forEach(function(id) {
        total.ids.push(id);
    }
} 
return total;
};

日付をなんらかの形で回転させる必要があることはわかっていますが、頭を包み込むことはできません。

4

1 に答える 1

0

放出[i].ids.forEach()を閉じるためのreduce関数に「)」がないようです。これはあなたがやろうとしていることですか?

r = function (key, values) {
    var total = {ids:[]};
    for (var i in values) {
        values[i].ids.forEach(
            function (id){
                 total.ids.push(id);
            }
        );
    }
    return total;
}

入力

{_id:2, tags: ["dog", "Jenna"]}
{_id:1, tags: ["cat", "Jenna"]}

結果:

{"results" : [
        {"_id" : "Jenna",
         "value" : {"ids" : [2,1]}
        },
        {"_id" : "cat",
         "value" : {"ids" : [1]}
        },
        {"_id" : "dog",
         "value" : {"ids" : [2]}
        }
    ],
    "timeMillis" : 1,
    "counts" : {
        "input" : 2,
        "emit" : 4,
        "reduce" : 1,
        "output" : 3
    },
    "ok" : 1,
}
于 2012-07-31T20:35:58.723 に答える