如何从mongodb获取随机对

如何从mongodb获取随机对,mongodb,random,random-sample,Mongodb,Random,Random Sample,所以我有一个有趣的用例,我一直在尝试为它找到一个高效的mongo查询 首先,我有12000个类别和100000个帖子。我需要从随机类别中随机选择100对帖子。这些对是从类别中随机选择的,但每对都必须有属于同一类别的两个帖子 用户查看每一对进行评分,一旦他们查看完这100篇文章,他们会随机获得另外100篇文章(最好不是他们已经看到的任何一对) 因此,要求如下: 从一组随机类别中随机抽取100对帖子 可选要求: 不返回他们已经评级的同一对 Mongo系列 使用者 类别 职位 类别 评级(

所以我有一个有趣的用例,我一直在尝试为它找到一个高效的mongo查询

首先,我有12000个类别和100000个帖子。我需要从随机类别中随机选择100对帖子。这些对是从类别中随机选择的,但每对都必须有属于同一类别的两个帖子

用户查看每一对进行评分,一旦他们查看完这100篇文章,他们会随机获得另外100篇文章(最好不是他们已经看到的任何一对)

因此,要求如下:

  • 从一组随机类别中随机抽取100对帖子
可选要求:

  • 不返回他们已经评级的同一对
Mongo系列

  • 使用者
  • 类别
  • 职位
    • 类别
    • 评级(帖子中嵌入的集合)

在Mongo我该怎么做。。。如果比较容易的话,我是否应该将这些数据从mongo移到另一个db?

我认为您可以通过两个查询来实现这一点。首先,您需要使用聚合框架并对Posts集合执行map reduce操作。在映射阶段,使用category id作为键,并向reducer发送post id

在减少阶段,从每个类别中选择两个随机id。在地图的末尾,您将有一个
Post
id列表。然后从
posts
集合中检索这些帖子

ratedBy
字段添加到
Post
文档中,当用户对帖子进行评分时,将其用户名添加到ratedBy字段中。然后首先将该字段用作map reduce命令的过滤器,这样就不会将已评级的文档带给用户


祝你好运是的。非常有趣的问题。我的建议是在post文档中添加一个
randomVal
字段。然后您可以在
{CategoryId:1,randomVal:1}
上进行排序。结果将是一个光标,该光标按
CategoryId
对所有帖子进行分组,但在该分组中是随机的。如果您在概念上将其视为一个数组,那么您可以选择所有偶数索引的帖子,并将它们与奇数邻居配对,以获得类别中唯一的随机对


我认为如何从这个列表中选择随机对需要一些实验,但我的直觉是,最好的方法是有一个单独的进程,定期缓存一组按单独的
randomVal2
排序的对。面向用户的查询一次只会通过这个pairs集合增加100个。

我该如何随机进行呢?我不一定要扫描所有的帖子或类别,那么有没有一种方法可以抓取一个随机集?你的帖子和类别的结构是什么?你如何识别一个类别或帖子,它们的ID是什么类型?