Утверждение «рекурсивное toObject» 13076 не удалось в MongoDB

сегодня моя функция карты начала сообщать об ошибке утверждения 13076 «рекурсивный код 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.


person aksyr_    schedule 31.07.2012    source источник


Ответы (1)


Итак, сообщение об ошибке было действительно расплывчатым, но проблема, похоже, вызвана дублирующимся значением поля «id» в массиве «values». Когда я изменил идентификатор в одном из элементов массива, функция снова заработала.

person aksyr_    schedule 21.08.2012