7

我浏览了 mongo 网站上的大多数 mongodb 架构设计文章以及 SO 上的大多数问题。还有一个用例我还没有弄清楚。在查看这些教程时,他们通常会参考文章评论问题和产品/类别问题。我想弄清楚在查询帖子列表时如何建模一对多关系(作者与帖子)。以下是示例模式:

Users: {
    _id: ObjectID
    Name: String
    Email: String
}

Posts: {
    _id: ObjectID
    user_id: ObjectID
    body: String
    comments: [
        body: String
    ]
}

现在,假设您要查询最新的 10 个帖子。一个非常简单的查询,但现在您的帖子可能每个帖子都有一个指向用户的唯一 ObjectID。现在,您应该如何完成获取每个用户的姓名和电子邮件以获取帖子。

  1. 您是否应该从帖子查询中创建用户 ObjectID 的数组,然后运行查询 db.users.find({ _id: {$in: PostsUserIDArray}}); 之后,您会使用您的应用程序逻辑将正确的用户信息与正确的帖子相匹配吗?

  2. 您是否应该在帖子中保留数据的副本。IE 将用户 ID、姓名和电子邮件保存在帖子表中。然后,当用户更新此信息以更新帖子中的所有信息时,只需挂一个钩子即可。

  3. 一个我自己或我的朋友没有想到的选择。

感谢所有的帮助,因为我试图围绕 mongo 数据建模。

4

1 回答 1

2

对于我从 MongoDB 创建者那里看到的一些视频,他们提倡第二种解决方案。如果您的用户拥有的数据不仅仅是姓名和电子邮件,并且您在显示帖子时仅显示姓名和电子邮件,那么将其存储在帖子中并不是很糟糕。因此,您在查询帖子时不必执行其他查询。而且由于用户通常不会每天更改他的姓名,因此在他更改姓名后对所有帖子运行更新比在显示帖子时执行其他查询来检索信息更有效。

编辑:链接到视频http://lacantine.ubicast.eu/videos/3-mongodb-deployment-strategies/

于 2011-08-07T19:33:03.420 回答