【问题标题】:mongodb document structure and mvc model structuremongodb文档结构和mvc模型结构
【发布时间】:2013-02-20 05:47:54
【问题描述】:

我从 CodeIgniter/MySQL 来到 Laravel/MongoDB 应用程序。

我的应用结构是:

用户(模型)

  • 身份证
  • 名字
  • 姓氏
  • 年龄
  • 性别
  • facebook_id
  • facebook_data
  • google_id
  • google_data

测试(模型)

  • user_id
  • 类型
  • 标题
  • 状态
  • 结果

在 MongoDB 中,我应该有一个包含许多 TESTS 的 USER 集合,还是将 TESTS 放在 USER 集合之外?

【问题讨论】:

  • 问题正是关于绘制集合结构。什么时候将所有用户数据放在用户集合中是一个坏主意?何时分成不同的集合/模型?
  • 您可能会发现 this answer 有点相关

标签: php mongodb


【解决方案1】:

数据建模注意事项

the mongoDB documentation 对此进行了详细介绍 - 尽管它不是 mongoDB 特定的问题。

没有全局正确或错误的答案,但作为一项规则,如果您正在考虑创建嵌入文档的数组,例如:

db.posts.findOne();
{
    title: "Some Post",
    comments: [
        {
            _id: ObjectId("x"),
            author_id: ObjectId("y"),
            body: "z",
            created: Date()
        },
        {
            _id: ObjectId("a"),
            author_id: ObjectId("b"),
            body: "c",
            created: Date()
        },
    ]
}

...这会很好用,只需要少量的数据。对于非平凡的数据量,它可能是非常严格/有问题的。例如,如果每个帖子有数百个 cmets - 很难有效地对它们进行分页。因此,如果您希望嵌入文档的数量很大,请不要创建嵌入文档的数组 - 而是使用单独的集合。

问题中数据的示例架构

您可以为您的数据考虑以下架构:

用户:

_id: objectId
firstname
lastname
age
gender
facebook: {
    id: longint/string
    locale:
    ...
}
google: {
    id: string
    age:
    ...
}

测试

_id: objectId
user_id: objectId
type
title
status
result

facebook 和 google 对象包含问题中所写的“数据” - 但除此之外,您有一个普通用户有很多测试,测试属于用户数据关系。这允许进行任意数量的测试,并且考虑到问题中的信息,并没有任何真正的缺点。

【讨论】:

  • 谢谢!这个文档页面对数据建模有很大帮助!
猜你喜欢
  • 2016-02-29
  • 2016-07-24
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-23
  • 2020-09-15
相关资源
最近更新 更多