mongodb文档结构和mvc模型结构

时间:2013-03-05 17:32:39

标签: php mongodb

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

我的应用结构是:

用户(型号)

  • ID
  • 姓名
  • 名字
  • 年龄
  • 性别
  • facebook_id
  • facebook_data
  • google_id
  • google_data

测试(模型)

  • USER_ID
  • 标题
  • 状态
  • 结果

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

1 个答案:

答案 0 :(得分:2)

数据建模注意事项

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()
        },
    ]
}

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

问题中数据的示例模式

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

用户:

_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对象持有“数据”,如问题中所写 - 但是从你有普通用户的appart有很多测试,测试belongsTo用户数据关系。这允许任何数量的测试,并且根据问题中的信息没有任何实际缺点。

相关问题