MongoDB 论坛模型

den*_*iss 6 mysql schema schema-design mongodb

所以我正在为一个论坛创建一个模型。想想线程和一堆评论在哪里。线程有很多评论。在 RDBMS 世界中,我会这样设计

Thread --has many--> Comment
id                   id
user_id              thread_id
                     user_id 
Run Code Online (Sandbox Code Playgroud)

现在,我想,有了这个,数据/模式将遵循许多正常形式之一(我忘记了)。我认为这是最明智的做法。但是,在 NoSQL 世界 (MongoDB) 中执行此操作时,设计这种关系的最佳方法是什么?我几乎可以用 RDBMS 的方式来做,但是我会失去使用嵌入对象的优势。出于某种原因,我更倾向于这样做

Thread
_id
user_id
comments => [{_id, user_id, body, created_at}]
Run Code Online (Sandbox Code Playgroud)

什么是最明智的方式来做到这一点,我想这就是我要问的。为什么?

rsm*_*thy 6

首先,我希望你已经阅读了关于Schema Design的文档,其中解释了一个类似于你的例子。

因此,您可以根据自己的选择嵌入或链接。如果评论数量预计可管理(相对较小),我会嵌入,如果评论过多,我会链接。

嵌入的优点是只需要一个单一的 DB 调用来显示单个帖子/线程,并且通常可以将 mongodb 响应按原样发送到浏览器(如果客户端进行 UI 渲染)。*注意:添​​加评论将需要使用 $push 进行更新。请记住,comment._id 必须由您创建,MongoDB 不会为您自动创建。嵌入式场景中评论数据的任何更新都需要使用 $ 位置运算符进行更新。*