我在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"
}]
}]
}
这只是假的,但我认为你明白了。我现在只需要低层的每个项目的值和相关的名称。我想做的是,我认为用mapReduce
例程的mapFunction
解释得更好:
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
}));
}
}
我的减少函数只是一个虚拟函数,因为我得到了我想要的。
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
函数的值,但这不能是我的问题在这里,可以吗?
问题出在我们的解析器上。没有特定的mapreduce或mongodb