【问题标题】:Function is not recognized in map reduce command, mongoDB (javascript)map reduce命令中无法识别函数,mongoDB(javascript)
【发布时间】:2021-07-28 07:11:10
【问题描述】:

我在 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'});

这是我得到的:

【问题讨论】:

    标签: javascript mongodb mapreduce


    【解决方案1】:

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

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

    但不要那样做。

    来自reduce function documentation

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

    考虑使用带有$lookup 阶段的聚合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      相关资源
      最近更新 更多