MongoDB 中的关系(通过 Mongoose)

Posted

技术标签:

【中文标题】MongoDB 中的关系(通过 Mongoose)【英文标题】:Relationships in MongoDB (via Mongoose) 【发布时间】:2013-04-02 23:06:56 【问题描述】:

考虑一个典型的博客应用程序,其中一个博客可以有很多帖子,而一个帖子可以有很多 cmets。 假设我们想提供一个 RESTfull API 来访问它。

如果我要使用关系数据库来存储这些数据,我会在 posts 表中拥有一个博客的外键和 cmets 表中的帖子的外键。

当通过 Mongoose 使用 MongoDB 时,我看到了三种不同的方法来设计集合:

    拥有三个集合:一个用于博客,一个用于帖子,一个用于 cmets。帖子的架构将有一个引用其博客的字段,而 cmets 的架构将有一个引用其帖子的字段。 (非常类似于关系解决方案。)

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

    只有一个包含子文档和子子文档的集合,其中博客包含一组帖子,每个帖子包含一组 cmets。

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

【问题讨论】:

开始here 和here。老实说,没有正确的答案。在数据库外部缓存页面、帖子和 cmets 是一个非常明智的选择,有助于缓解一些可能的问题。 【参考方案1】:

3个收集方式怎么样,但是

    使用 $slice 运算符将最后 (N) 个 cmets 复制到 Post 集合中,从而使“最新 cmets”列表保持简短

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

    从博客复制或缓存博客信息,或将摘要嵌入帖子中。

主要内容:让帖子条目包含您想要一次性渲染的所有内容。

【讨论】:

以上是关于MongoDB 中的关系(通过 Mongoose)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB / Mongoose 有很多关系

mongodb一对n关系中的两种导航

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段

使用 mongoose 通过 update 方法向 mongodb 中的现有文档添加新字段

MongoDB/Mongoose:多对多关系

Mongodb mongoose节点js模式关系