1

配列で forEach() を使用するとすぐに問題が発生する MongoDB で Map 関数を作成しています。

ユーザーは次のようになります。

"channels" : [
    "Channel 1",
    "Channel 2",
],
"user_id" : "somehash"

これは、エラーを引き起こしている私のマップ関数です:

var map = function() {
    if(this.channels && this.user_id) {

        var user_id = this.user_id;

        this.channels.forEach(function(z, user_id) {
            emit(z, {user: user_id});
        });
    }
}

mongo で Map/Reduce を実行しているときに、次のコマンドを使用すると、次のエラーも表示されます。

> db.users.mapReduce(map, reduce, {out : "myoutput" });
Wed Aug  1 12:48:11 uncaught exception: map reduce failed:{
    "assertion" : "map invoke failed: JS Error: TypeError: this.channels.forEach is not a function nofile_b:3",
    "assertionCode" : 9014,
    "errmsg" : "db assertion failure",
    "ok" : 0
}

これは簡単な問題かもしれませんが、どこが間違っているのかわかりません。

この問題について何か助けていただければ幸いです。

ありがとう!

4

1 に答える 1

1

forEachの代わりにforを使用して修正しました。これは、まだ使用できるベクトルであったためです。.length

解決:

var map = function() {
    if(this.channels && this.user_id) {
        var user_id = this.user_id;
        for(var i = 0, imax = this.channels.length; i<imax; i++) {
            emit(this.channels[i], {user: user_id});
        }   
    }
}
于 2012-08-01T12:20:28.193 に答える