我在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
函数的值不匹配时,有时会发生这种情况,但这不是我的问题,可以吗?
答案 0 :(得分:0)
好的问题出在我们的解析器上。没有特定于mapreduce或mongodb。