我从 CodeIgniter/MySQL 来到 Laravel/MongoDB 应用程序。
我的应用程序结构是:
用户(型号)
- ID
- 名
- 姓
- 年龄
- 性别
- facebook_id
- facebook_data
- google_id
- 谷歌数据
测试(模型)
- 用户身份
- 类型
- 标题
- 地位
- 结果
在 MongoDB 中,我应该有一个包含许多 TESTS 的 USER 集合,还是将 TESTS 放在 USER 集合之外?
这在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 对象持有问题中所写的“数据” - 但除此之外,您有一个普通用户有很多测试,测试属于用户数据关系。这允许进行任意数量的测试,并且考虑到问题中的信息,并没有任何真正的缺点。