0

所以我需要在我的数据库中获取用户帖子的类别中的排名和总数。例如,所需的输出可能是

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".

这是架构

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 中尝试这个,但是有没有使用聚合命令的方法?什么是最有效的 map reduce 函数?

4

1 回答 1

0

这是一个困难的问题。

您最有可能尝试做的事情与许多网站(例如这个(stackoverflow))在标签(即mongodb)中使用最佳答案和提问者所做的相同,但在每个用户级别。

你可以在这里看到我刚才的意思的一个例子:https ://stackoverflow.com/tags/mongodb/topusers

聚合框架和/或 map reduce 的问题在于,您必须为所有用户计算该类别下的所有记录的统计信息。这对于 203 条记录可能没问题,但是当您开始达到可能数千条记录时,实时执行此操作将变得非常困难。

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

我必须承认我不知道如何使用聚合框架来做到这一点,因为每次管道迭代都不能存储关于其前一次迭代的常量(即增量数字),除非它位于组运算符之一上。

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

于 2013-01-30T13:21:58.910 回答