0

我有一个帖子集合,其中存储帖子相关信息和作者信息。这是一棵嵌套树。然后我有一个 postrating 集合,其中存储了哪些用户对特定帖子的评分向上或向下。

当请求获取特定帖子的嵌套树时,如果当前用户已投票,我还需要返回,如果是,则在每个返回的帖子上向上或向下。

在 SQL 中,这类似于“posts.*, postrating.vote from posts join postrating on postID and postrating.memberID=currentUser”。

我知道 MongoDB 不支持连接。我对 MongoDB 有哪些选择?

  1. 使用 map reduce - 简单查询的性能?
  2. 在 post 文档中存储评级 - BSON 大小限制?
  3. 获取所有必需职位的列表。获取当前用户的所有投票列表。循环发布帖子,如果用户投票将其添加到输出中?

还有其他方法吗?这可以使用聚合来完成吗?

注意:我上周开始使用 MongoDB。

4

1 回答 1

0

在 MongoDB 中,最简单的方法可能是使用应用程序端逻辑来处理此问题,而不是在单个查询中尝试此操作。有很多方法可以构建数据,但这里有一种可能性:

user_document = {
     name : "User1",
     postsIhaveLiked : [ "post1", "post2" ... ]
     }

post_document = {
     postID : "post1",
     content : "my awesome blog post"
     }

使用此结构,您将首先查询用户的 user_document。然后,对于返回的每个帖子,您可以检查该帖子postID是否在该用户的“postsIhaveLiked”列表中。

这样做的主要思想是您分两步获取数据,而不是一步。这与连接不同,但基于相同的基本思想,即使用一个键(在本例中为postID)来关联两个不同的数据。

一般来说,出于性能原因,尽量避免使用 map-reduce。对于这个简单的用例,聚合不是您想要的。

于 2013-09-18T20:51:17.217 回答