mongodb - 根据另一个集合中的值将列添加到一个集合查找

时间:2013-07-30 22:09:46

标签: mongodb join pymongo

我有一个帖子集合,用于存储帖子相关信息和作者信息。这是一个嵌套的树。 然后我有一个postrating集合,用于存储哪个用户对特定帖子进行了上调或下调。

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

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

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

  1. 使用map reduce - 一个简单查询的性能?
  2. 在帖子文件中存储评级 - BSON大小限制?
  3. 获取所有必需帖子的列表。获取当前用户的所有投票列表。在帖子上循环,如果用户已投票,则将其添加到输出?
  4. 还有其他方法吗?可以使用聚合来完成吗?

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

1 个答案:

答案 0 :(得分: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。对于这个简单的用例,聚合不是你想要的。