3

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

我的应用程序结构是:

用户(型号)

  • ID
  • 年龄
  • 性别
  • facebook_id
  • facebook_data
  • google_id
  • 谷歌数据

测试(模型)

  • 用户身份
  • 类型
  • 标题
  • 地位
  • 结果

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

4

1 回答 1

2

数据建模注意事项

这在mongoDB 文档中有一些详细介绍- 尽管它不是 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 对象持有问题中所写的“数据” - 但除此之外,您有一个普通用户有很多测试,测试属于用户数据关系。这允许进行任意数量的测试,并且考虑到问题中的信息,并没有任何真正的缺点。

于 2013-03-05T18:10:48.987 回答