var mapFunction1 = function() {
for (var idx = 0; idx < this.account.length; idx++) {
emit("saldo", this.account[idx].balance);
}
};
var reduceFunction1 = function(keyBalance, valuesBalance) {
return Array.sum(valuesBalance);
};
db.people.mapReduce(mapFunction1, reduceFunction1, {
out : "saldo"
})
db.saldo.find()
并显示错误
未捕获的异常:map reduce failed:{ “errmsg”:“异常:TypeError:无法在'is.account.length; i ++)'(第2行)附近的_funcs1(_funcs1:2:37)读取undefined \ n的属性'length'”, “code”:16722, “ok”:0
答案 0 :(得分:0)
这意味着在文档中找到的对象上“长度”未定义,很可能是因为该属性不存在。
由于这是mapReduce
进程中的JavaScript评估,因此您的JavaScript测试需要“严格”测试这些条件:
var mapFunction1 = function() {
if ( this.hasOwnProperty("account") {
for (var idx = 0; idx < this.account.length; idx++) {
emit("saldo", this.account[idx].balance);
}
}
}
所以.hasOwnProperty()
这里是通过测试对象中实际存在来避免此类错误的关键。