首页 > 解决方案 > 在 MongoDB 中定义具有相似结构的集合的最佳方法

问题描述

我正在尝试创建一个类似部分的论坛,为此我使用 MongoDB 来存储数据。

所以我的结构由主线程和帖子组成。

例如用户创建一个线程

{
  title: String
  post: Post // initial post
  totalReactionCounts: { [key: emojiName]: number } // store all post reactions number for easy sort
}

其他用户可以在该主题下发表一些评论

{
 text: String,
 reactions: { enum: [...emojis] } 
 repliedTo: Post // users can reply to others comments
 thread: Thread,
 isMain: Boolean  // whether this is initial post of thread
}

我认为这是一个相当简单的模式,拥有只存储标题和多个帖子的主线程,即one-to-many. 我怀疑的是,我是否应该有isMain标志,这表明这是否是作者的初始帖子。

我存储这种标志的原因是其他参与者可以对线程和子帖子做出反应。但是,当我搜索线程title和主要帖子时,这种“规范化”方式让我很吃力text

另一种非规范化方法建议将reactionstext直接存储在Thread. 但是这样我会重复代码,尽管它们属于不同的模型。

我的问题是,如何处理这种问题,其中集合共享相似的数据并在它们之间存在关系,而不会在非规范化方法的情况下失去 MongoDB 提供的性能提升。

标签: mongodbdatabase-designdatabase-normalizationdenormalization

解决方案


推荐阅读