schema - 如何在 mongodb 中为作者/用户模型设计模式

标签 schema mongodb schema-design

我已经浏览了 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、姓名和电子邮件保存在帖子表中。然后在用户更新此信息时挂一个钩子(Hook)以更新帖子中的所有信息。

  3. 我或我的 friend 没有想到的选项。

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

最佳答案

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

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

关于schema - 如何在 mongodb 中为作者/用户模型设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6975065/

相关文章:

java - 找不到元素的声明(XML 架构)

mongodb $nin on ObjectId 不起作用

mysql - 如何在 MongoDB 中建模多对多关系(对于 MySQL 用户)

带有 HTTPS 的 XML 命名空间 URI?

hibernate - 运行导出器#2:hbm2ddl时发生异常(生成数据库架构)

mysql - 跟踪谁在数据库中收到/未收到帖子的最佳方法?

arrays - mongoDB中数组中的字符串字段值长度

java - 如何在where子句中使用多个条件在mongodb java中搜索

node.js - Mongoose 变量键名

database - 图数据库模式设计 - 这适合 neo4j 吗?