我对mongodb有点新鲜,我正在尝试设置一个简单的服务器,我会在某些事情中拥有用户,帖子,评论,喜欢和不喜欢。我想知道哪种方式应该最有效地设置?
我应该为喜欢添加userId和postId的表添加一个表(对于dislike和comments表或多或少相同)
如果喜欢,不喜欢和评论是帖子的一部分会不会更好?像:
//Post structure
{
"_id":"kljflskds",
"field1":"content",
"field2":"content",
"likes":[userId,userId,userId],
"dislikes":[userId,userId,userId],
"comments":[{comment object},{comment object},{comment object}]
}
因为对于每一篇文章,当我回顾它们时,我想知道它有多少喜欢,有多少不喜欢和有多少评论。对于第一个版本,我需要在服务器上进行多次查询(不必要的处理器电源?)或电话(不必要的带宽)。但第二个只需要一个查询。我认为将评论作为帖子的一部分的第二种选择似乎更有效率,但我不是专业人士,所以我想听听其他人对此的看法?
答案 0 :(得分:2)
正如已经指出的那样,面向文档的数据库中没有表。您还会发现,与关系数据库不同的是,通常采用“正确的方式”来构建数据库,MongoDB也是如此。您的架构应根据您最常访问信息的方式进行构建。与表格中的行不同,文档非常灵活。
您可以创建评论集合或直接在帖子文档中使用它们。两个考虑因素是:1。您是否需要在不访问帖子的情况下访问评论? 2.你的文件是否会变得过于庞大和笨拙?
在这两种情况下,您的博客最有可能更好地嵌套评论,因为您的大多数流量都会搜索帖子,并且您将提取与帖子相关的所有评论。此外,评论不会由多个表拥有;此外,MongoDB并不像关系数据库那样被非规范化,因此在多个文档中具有重复信息(即标记名称,城市名称等)是正常的。
此外,拥有likes
的集合是一种非常“关系”的思维方式。在MongoDB中,我想不出你想要likes
集合的用例。当你来自关系世界时,你真的必须退后一步,重新思考你是如何创建数据库的,因为你会不断地与它进行斗争。
只有两个集合,posts
和users
,获取您正在寻找的信息将是微不足道的,因为您可以获得喜欢和评论的计数,它们都是就在那里。