我在创建 mapreduce 算法时遇到问题,该算法将为我提供所需的统计信息。我有一个可以创建帖子的用户对象,并且帖子可以得到其他用户的很多赞。
用户——
发帖
——喜欢
帖子没有嵌入到用户中,因为我们单独访问帖子,而不仅仅是在用户上下文中。我需要的统计数据是作者获得的点赞数,我需要通过用户帖子的点赞数来获得。问题是因为帖子没有嵌入,我无法在我的地图功能中访问它们。这是我目前拥有的 map 和 reduce 函数
def reputation_map
<<-MAP
function() {
var posts = db.posts.find({user_id:this._id});
emit(this._id, {posts:posts});
}
MAP
end
def reputation_reduce
<<-REDUCE
function(key, values) {
var count = 0;
while(values.hasNext()){
values.next();
count+=1;
}
return {posts:count};
}
REDUCE
end
这应该只返回每个用户的帖子,所以我什至还没有达到喜欢的级别,但不是计数,这只会返回帖子的 dbquery。这样做的正确方法是什么?