map reduce 命令中无法识别函数,mongoDB (javascript)
Function is not recognized in map reduce command, 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'});
这是我得到的:
该函数是在本地 运行 javascript 实例中定义的,而不是服务器。
为了可以从服务器调用该函数,您需要在服务器上对其进行预定义或将定义包含在 reduce 函数中。
但不要那样做。
来自reduce function documentation:
The reduce function should not access the database, even to perform read operations.
看看在 $lookup 阶段使用聚合。
我在 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 实例中定义的,而不是服务器。
为了可以从服务器调用该函数,您需要在服务器上对其进行预定义或将定义包含在 reduce 函数中。
但不要那样做。
来自reduce function documentation:
The reduce function should not access the database, even to perform read operations.
看看在 $lookup 阶段使用聚合。