MongoDB/Mongoose:多对多关系

Posted

技术标签:

【中文标题】MongoDB/Mongoose:多对多关系【英文标题】:MongoDB/Mongoose: many to many relationship 【发布时间】:2014-01-21 07:47:19 【问题描述】:

我有两个 Mongoose 模式 PostTag,我想设计它们之间的多对多关系。我想知道哪一个是表演的最佳解决方案:

    在 Tag 和 Post 模型中,都保留一个数组来引用其他模式的模型(每个 Tag 都有许多帖子在 id 数组中引用,反之亦然) 仅将 Tag id 数组保留在 Post 架构中

第二种解决方案似乎更容易实现,因为当我编辑与一篇文章相关的标签列表时,只需修改一个数组,但同时在获取属于一个标签的所有文章时性能可能会降低

【问题讨论】:

【参考方案1】:

仅在 Post 架构中保留标签 ID 数组

我肯定会使用更直接的第二种解决方案。

除非您有特殊要求,否则您不需要让每个 Tag 明确跟踪 Post 引用。 Tag 文档中的 Post 引用数组实际上是无限大小的。这种使用模式往往会为流行的文档造成存储碎片和/或性能问题,这些文档的分配记录空间经常超过record padding。

另一方面,单个帖子中使用的标签数量不太可能随着时间的推移而发生很大变化,您可以通过在 Post 集合中的 Tag 数组上添加索引来提高此查询的性能。

【讨论】:

以上是关于MongoDB/Mongoose:多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

具有额外多对多关系的 JPA 多对多

雄辩的多对多对多 - 如何轻松加载远距离关系

Hibernate学习笔记 — 多对多关系映射

Django:通过另一个多对多关系访问多对多对象

多对多关系

多对多manytomany