我已经浏览过mongo网站上的大多数mongodb架构设计文章,以及大多数关于SO的问题。还有一个我还没想到的用例。在查看这些教程时,他们通常会参考文章评论问题和产品/类别问题。我想弄清楚在查询帖子列表时如何建模一对多关系(作者到帖子)。以下是示例模式:
Users: {
_id: ObjectID
Name: String
Email: String
}
Posts: {
_id: ObjectID
user_id: ObjectID
body: String
comments: [
body: String
]
}
现在,假设您要对最近的10个帖子运行查询。一个非常简单的查询,但现在你有一些帖子,每个帖子都有一个指向用户的唯一ObjectID。现在,您应该如何获得每个用户的姓名和电子邮件。
您是否应该从posts查询创建用户ObjectID的数组,然后运行查询db.users.find({_ id:{$ in:PostsUserIDArray}});之后,您会使用您的应用程序逻辑将正确的用户信息与正确的帖子相匹配吗?
您是否应保留帖子中的数据副本。 I.E.在posts表中保留用户ID,名称和电子邮件。然后,当用户更新此信息以更新帖子中的所有信息时,只需一个钩子。
我或我的朋友没有想过的选项。
当我试图围绕mongo数据建模时,我感谢所有的帮助。
答案 0 :(得分:2)
对于我从MongoDB创作者看到的一些视频,他们提倡第二种解决方案。如果您的用户拥有的数据不仅仅是名称和电子邮件,而且在显示apost时只显示姓名和电子邮件,那么将其存储在帖子中并不是很糟糕。因此,在查询帖子时,您不必执行其他查询。由于用户通常不会每天更改其名称,因此在更改其名称后对所有帖子运行更新比在显示帖子时执行其他查询以检索信息更有效。
修改:链接到视频http://lacantine.ubicast.eu/videos/3-mongodb-deployment-strategies/