【问题标题】:mongodb - add column to one collection find based on value in another collectionmongodb - 根据另一个集合中的值将列添加到一个集合中
【发布时间】:2013-07-31 06:26:12
【问题描述】:

我有一个帖子集合,其中存储帖子相关信息和作者信息。这是一棵嵌套树。 然后我有一个 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。

【问题讨论】:

    标签: mongodb join pymongo


    【解决方案1】:

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

    user_document = {
         name : "User1",
         postsIhaveLiked : [ "post1", "post2" ... ]
         }
    
    post_document = {
         postID : "post1",
         content : "my awesome blog post"
         }
    

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

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

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

    【讨论】:

    • 我最终以类似的方式实现了它。
    猜你喜欢
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多