1

所以我有一个有趣的用例,我一直试图找到一个有效的 mongo 查询。

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

用户查看每一对以进行评分,一旦他们完成查看 100 个,他们会获取另外 100 个随机帖子(最好不是他们已经看过的任何相同对)。

所以要求是:

  • 从一组随机类别中随机获取 100 对帖子

可选要求:

  • 不退回他们已经评价过的相同配对

蒙戈系列

  • 用户
  • 类别
  • 帖子
    • 类别 ID
    • 评分(帖子中的嵌入集合)

我将如何在 Mongo 中执行此操作...如果更容易,我应该将其中一些数据从 mongo 移到另一个数据库吗?

4

2 回答 2

0

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

在 reduce 阶段,从每个类别中选择两个随机 id。在 map reduce 的末尾,您将获得一个Postid 列表。Posts然后从集合中检索这些帖子。

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

祝你好运

于 2013-01-23T14:31:08.687 回答
0

是的。非常有趣的问题。我的建议是randomVal在您的邮寄文件上放置一个字段。然后就可以排序了{CategoryId: 1, randomVal: 1}。结果将是一个游标,该游标将所有帖子分组,CategoryId但在该分组内随机分组。如果您从概念上将其视为一个数组,您可以选择所有偶数索引的帖子,并将它们与奇数邻居配对,以获得类别内的唯一随机对。

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

于 2013-01-23T17:45:38.590 回答