2012-01-28 79 views
2

因此,我正在为论坛创建模型。想想线程和一堆评论在哪里。线程有很多意见。在RDBMS的世界里,我会设计这个如此针对MongoDB的论坛模型

Thread --has many--> Comment 
id     id 
user_id    thread_id 
        user_id 

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

Thread 
_id 
user_id 
comments => [{_id, user_id, body, created_at}] 

什么是做到这一点我想这就是我要问的最无意义的方式。为什么?

回答

2

首先,我希望您已阅读Schema Design上的文档,该文档以类似于您的示例进行了解释。

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

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