首页 > 解决方案 > MongoDB - 如何像在关系数据库中一样执行连接

问题描述

您可能已经猜到了,我来自 RDBMS 背景。

我在 MongoDB 中制作了一个文档模型。简单的表示如下:

收藏users

{
  "_id": <ObjectId>,
  "name": "Simon",
  "photo": "https://...jpg"
}

收藏:Posts

{
  "_id": <ObjectId>,
  "author": ObjectId(<AdIdFromUsers>),
  "likes": [ ObjectId(<AdIdFromUsers>), ObjectId(<AdIdFromUsers>) ],
  "comments": [
    {
      "author": ObjectId(<AdIdFromUsers>),
      "content": "Hi everyone!",
      "likes": [ ObjectId(<AdIdFromUsers>), ObjectId(<AdIdFromUsers>) ],
      "replies": [
         {
            "author": ObjectId(<AdIdFromUsers>),
            "content": "Hi everyone!",
            "likes": [ ObjectId(<AdIdFromUsers>), ObjectId(<AdIdFromUsers>) ],
         }
       ]
    }
  ]
}

我从 mongodb 文档中读到,在大多数情况下可以使用Manual Reference 。

但我的问题是,如何优化它以向数据库发出数百个请求以获取有关帖子的信息?喜欢:

  1. 先获取post文件
  2. 然后循环浏览评论和回复并获取作者信息
  3. 循环喜欢并获得每个用户

如果我采取了错误的方法,请随时纠正我

标签: mongodbnosql

解决方案


根据我的经验,这在我看来是完全正常的。我也是这样做的。在我的后端,当我想从我的实际文档中获取多个子文档时,我会通过一个for循环,收集信息,将其存储在一个数组中,然后将响应返回给用户。

以下是一些优点:

  • 您不必为您拥有的每种类型的文档创建单独的集合
  • 据我所知,它有点慢,但绝对应该完成这项工作
  • 您可以将所有信息保存在一个地方

推荐阅读