2013-04-10 45 views
0

考虑一个典型的博客应用程序,博客可以有很多帖子,帖子可以有很多评论。 假设我们想提供一个RESTfull API来访问它。MongoDB中的关系(通过Mongoose)

如果我要使用关系数据库来存储这些数据,我会在posts表中有一个外键,在comments表中有一个外键给帖子。

当通过使用猫鼬MongoDB中,我看到三种不同的方式来设计的集合:

  1. 有三个类别:一为博客,一个是员额和一个征求意见。帖子的模式将有一个字段引用其博客,而注释的模式将有一个字段引用其帖子。 (非常类似于关系解决方案)。

  2. 同样,三个集合,但每个博客都有一个对帖子的引用数组,每个帖子都有一个引用数组。

  3. 只有一个包含子文档和子子文档的集合,其中博客包含一系列帖子,每个帖子都包含一系列评论。

哪一个是正确的?每一个的优缺点是什么?

+1

开始[这里](http://docs.mongodb.org/manual/core/data-modeling/)和[here](http://docs.mongodb.org/manual/use-cases/storing-注释/)。老实说,没有正确的答案。缓存页面,文章和评论数据库外部是一个非常明智的选择,有助于缓解一些可能的问题。 – WiredPrairie 2013-04-11 00:20:28

回答

1

怎么样3集的方法,但

  1. 复制去年(N)与$切片运营商评论到邮政收集,从而保持 “最新评论” 列表短

  2. $ inc Post中的评论数,因此可以快速检索每个帖子的评论数

  3. 复制或缓存博客中的博客信息,或者将摘要嵌入到博文中。

主要带回家:让它包含所有你想渲染的所有东西。