首页 > 解决方案 > map reduce命令中无法识别函数,mongoDB(javascript)

问题描述

我在 MongoDB 中尝试做的 map reduce 有一些问题。我定义的一个函数似乎在 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'});

这就是我得到的: ![在此处输入图像描述

标签: javascriptmongodbmapreduce

解决方案


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

为了使该函数可以从服务器调用,您需要在该处预定义它或将定义包含在 reduce 函数中。

但不要那样做。

减少功能文档

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

改为使用带有$lookup阶段的聚合。


推荐阅读