0

今日、私のマップ関数はアサーション エラー 13076 'recursive toObject' コードを報告し始めました。昨日はうまくいきました。

これが私のマップ関数です:

function () {
    for(i=0; i<this.values.length; i++) {
        emit(this.values[i].id, {
            'id': this.values[i].id,
            'start_date': this.values[i].start_date,
            'end_date': this.values[i].end_date,
            'hash': this.values[i].hash,
            'url': this.values[i].url});
    }  
}

for ループを forEach 関数に置き換えてみましたが、結果は同じです。

マップ関数を単一のエミットに制限するスコープ変数を持つ興味深い関数は、うまく機能します:

function () {
    for(i=0; i<this.values.length; i++) {
        if(this.values[i].id == myId) {
            emit(this.values[i].id, {
                'id': this.values[i].id,
                'start_date': this.values[i].start_date,
                'end_date': this.values[i].end_date,
                'hash': this.values[i].hash,
                'url': this.values[i].url});
        }
    }
}

もちろん、このマッピングをコードで直接実行することもできますが、実際に MapReduce を使用する必要があるときにこのエラーが発生することは望ましくありません。

4

1 に答える 1

0

エラー メッセージは非常に曖昧でしたが、問題は「values」配列の「id」フィールドの値が重複していることが原因のようです。配列要素の 1 つで id を変更すると、関数が再び機能し始めました。

于 2012-08-21T09:12:02.247 に答える