2013-07-30 70 views
0

我有一个存储帖子相关信息和作者信息的帖子集合。这是一个嵌套树。 然后我有一个postrating集合,它存储哪个用户对某个帖子进行了上或下的评分。mongodb - 将列添加到一个集合中查找基于另一个集合中的值

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

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

我知道MongoDB不支持连接。 MongoDB有什么选择?

  1. 使用map reduce - 性能为简单查询吗?
  2. 在邮件文档中存储收视率--BSON大小限制?
  3. 获取所有必填帖子的列表。获取当前用户所有投票的列表。在帖子上循环,如果用户已投票添加到输出?

还有别的办法吗?这可以使用聚合完成吗?

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

回答

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。对于这个简单的用例,聚合不是你想要的。

+0

我最终以类似的方式实现它。 – MavWolverine

相关问题