访问嵌套数组时,map函数中的MongoDB MapReduce错误:TypeError:无法读取属性

时间:2015-07-29 11:44:02

标签: javascript mongodb mapreduce

我在mongodb中有一个大型数据结构,如下所示:

datastructure = {
    "id": "id",
    "UpperLevel": [{
        "LowerLevel": [{
            "Name": "Name1",
            "Value": "Value1",
            "Flag": "Flag1"
        }, {
            "Name": "Name2",
            "Value": "Value2",
            "Flag": "Flag2"
        }, {
            "Name": "Name3",
            "Value": "Value3",
            "Flag": "Flag3"
        }, {
            "Name": "Name4",
            "Value": "Value4",
            "Flag": "Flag4"
        }]
    },
    "LowerLevel": [{
        "Name": "Name1",
        "Value": "Value1",
        "Flag": "Flag1"
    }, {
        "Name": "Name2",
        "Value": "Value2",
        "Flag": "Flag2"
    }, {
        "Name": "Name3",
        "Value": "Value3",
        "Flag": "Flag3"
    }, {
        "Name": "Name4",
        "Value": "Value4",
        "Flag": "Flag4"
    }]
  }]
}    

这只是假的,但我认为你明白了。我现在只需要具有相关名称的较低级别的每个项目的值。我想要做的是我想用mapFunction例程的mapReduce更好地解释:

var mapFunction = function() {
    for (var i = 0; i < this.UpperLevel.length; i++) {
    emit(this.id, {
        name1: parseFloat(this.UpperLevel[i].LowerLevel[0].Value),
        name2: parseFloat(this.UpperLevel[i].LowerLevel[1].Value),
        name3: parseFloat(this.UpperLevel[i].LowerLevel[2].Value),
        name4: parseFloat(this.UpperLevel[i].LowerLevel[3].Value
        }));
    }
}

我的reduce函数只是一个虚函数,因为我得到了我想要的东西。

var reduceFunction = function(key, values) {
    return Temp = {
    Data: values
    }
}

这适用于小型集合,但当我将它用于大型集合(30GiB)时,我得到ExceptionCode 16722并显示错误消息:

Exception: TypeError: Cannot read property 'Value'
of undefined
at _funcs1(_funcs1: 9: 77) near '.LowerLevel[3].Value);        
emit(key, value ' 

我知道当reduce函数的返回值与您的map函数的值不匹配时,有时会发生这种情况,但这不是我的问题,可以吗?

1 个答案:

答案 0 :(得分:0)

好的问题出在我们的解析器上。没有特定于mapreduce或mongodb。