MongoDB map/reduce,forEach不是一个函数

MongoDB map/reduce, forEach is not a function?

本文关键字:函数 一个 map reduce forEach MongoDB      更新时间:2024-06-06

我正在MongoDB中创建一个Map函数,当我在数组上使用forEach()时,它就出现了问题。

用户可能是这样的:

"channels" : [
    "Channel 1",
    "Channel 2",
],
"user_id" : "somehash"

这是我的地图功能,导致错误:

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
}

我尝试了一些不同的方法,但似乎都不起作用,这可能是一个简单的问题,但我看不出我做错了什么。

很乐意在这个问题上得到一些帮助。

谢谢!

通过对使用而不是对每个来修复它,因为它仍然是一个向量,我可以在它上使用.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});
        }   
    }
}