我在MongoDB中创建一个Map函数,一旦在数组上使用forEach()就会出现问题。
这就是用户的样子:
"channels" : [
"Channel 1",
"Channel 2",
],
"user_id" : "somehash"
这是导致错误的我的map函数:
var map = function() {
if(this.channels && this.user_id) {
var user_id = this.user_id;
this.channels.forEach(function(z, user_id) {
emit(z, {user: user_id});
});
}
}
当我在mongo中运行Map / Reduce时,我使用以下命令,我也得到以下错误:
> db.users.mapReduce(map, reduce, {out : "myoutput" });
Wed Aug 1 12:48:11 uncaught exception: map reduce failed:{
"assertion" : "map invoke failed: JS Error: TypeError: this.channels.forEach is not a function nofile_b:3",
"assertionCode" : 9014,
"errmsg" : "db assertion failure",
"ok" : 0
}
我尝试了一些不同的方法,但似乎都没有用,这可能是一个简单的问题,但我无法看到我做错了。
很高兴能在这个问题上得到一些帮助。
谢谢!
答案 0 :(得分:1)
使用代替代替 forEach 修正了它,因为它仍然是一个向量,我可以在其上使用.length
。
解决方案:
var map = function() {
if(this.channels && this.user_id) {
var user_id = this.user_id;
for(var i = 0, imax = this.channels.length; i<imax; i++) {
emit(this.channels[i], {user: user_id});
}
}
}