我有一个名为posts
的集合,其中包含多篇文章帖子和一个名为users
的集合,其中包含大量用户信息。每个post
都有一个名为author
的字段,该字段引用users
集合中的帖子作者。
在我的主页上,我将查询posts
集合并将一个帖子列表返回给客户端。由于我还想显示帖子的作者,我需要做类似sql的连接命令,以便所有帖子都有作者姓名,ID,等等。
如果我返回40个帖子的列表,我必须做40个sqllike-joins。这意味着每次我将进行41次查询以获取包含作者信息的帖子列表。这看起来真的很贵。
我正在考虑在存储帖子信息时存储作者信息。这样我只需要进行1次查询即可检索所有帖子和作者信息。但是,当用户信息发生更改(例如名称更改)时,列表将过时,管理此类列表似乎并不容易。
对此有更好或更标准的方法吗?
p.s:我正在使用mongodb
答案 0 :(得分:3)
Mongo是NoSQL DB。根据定义,NoSQL解决方案意味着非规范化(所有必需的数据应位于同一位置)
在您的示例中,作者和帖子之间的关系是一对多,但作者与帖子的比例非常小。简单来说,没有。作者与没有作者相比。的帖子会很小。
基于此,您可以安全地将作者信息存储在posts集合中。
如果您需要查询帖子集合,即如果您知道您的大多数查询将在帖子集合上执行,那么将作者存储在帖子中是有意义的。它不会占用很大的空间来存储一个属性,但它会在查询性能和编码/检索数据的容易性方面产生巨大的差异。