在mongo中使用聚合或map reduce获得排名

时间:2013-01-30 12:55:52

标签: mongodb mapreduce

因此,我需要在数据库中为用户的帖子获取排名和总数。例如,期望的输出可以是

Hi bob, here are your posts rankings:  
 'Breaking News' is ranked #10 of 203 in the 'news' category
 'Day at the Game' is ranked #24 of 67 in the 'sports' category".

这是Schema

PostSchema = new Schema({
 {
  score:Number,
  categoryId: ObjectId,
  categoryName: String,
  title: String,
  username: String
 }
});

样本帖

{ score: 12, 
  categoryId:"50cf7d2841d41f4f35000000", 
  categoryName:"sports", 
  title:"Day at the Game", 
  username:"bob"
}

我想我可以在map reduce中尝试这个但是有没有办法使用聚合命令?什么是最有效的地图缩减功能?

1 个答案:

答案 0 :(得分:0)

这很难。

您最有可能尝试做的事情与许多网站(例如stackoverflow)在标记(即mongodb)中的顶部答案和askers一样,但在每个用户级别上。

您可以在此处看到我的意思示例:https://stackoverflow.com/tags/mongodb/topusers

聚合框架和/或映射减少的问题是您必须为所有用户计算该类别下所有记录的统计信息。对于203条记录来说这可能没问题,但是当你开始达到数千条记录时,它将很难实时完成。

这就是为什么通常最好这样做,就像其他网站(包括这个网站)一样,每天一次可能通过map reduce。

我必须承认我知道无法用聚合框架做到这一点,因为每个管道迭代都不能存储关于其先前迭代的常量(即增量数字),除非它位于其中一个组操作符上。

然而,我在这里提出的观点应该可以帮助你了解你是否真的走在正确的道路上。