在map reduce命令mongoDB(javascript)中无法识别函数

在map reduce命令mongoDB(javascript)中无法识别函数,javascript,mongodb,mapreduce,Javascript,Mongodb,Mapreduce,我在MongoDB中尝试使用MapReduce时遇到了一些问题。我定义的函数似乎在reduce函数中不可见。 这是我的代码: function getName(user_id){ var users = db.users.aggregate({$project:{"_id":"$_id", "name":"$name"}}); users.forEach((it) => {if

我在MongoDB中尝试使用MapReduce时遇到了一些问题。我定义的函数似乎在reduce函数中不可见。 这是我的代码:

function getName(user_id){
    var users = db.users.aggregate({$project:{"_id":"$_id", "name":"$name"}});        
    users.forEach((it) => {if (user_id == it._id) return it.name;});    
    return "user not found"; 
}
var mapFunc = function(){ emit(this.user_id, this.book_id) };
var reduceFunc = function(key, values){return getName(key);};
db.booksToRecover.mapReduce(mapFunc, reduceFunc, {out:'users_to_recover_books_from'});
这就是我得到的:

该函数是在本地运行的javascript实例中定义的,而不是在服务器中定义的

为了从服务器调用该函数,您需要在那里预定义它,或者在reduce函数中包含该定义

但不要那样做

从:

reduce函数不应访问数据库,甚至不应执行读取操作。

请考虑将聚合与阶段一起使用