我来自CodeIgniter / MySQL到Laravel / MongoDB应用程序。
我的应用结构是:
用户(型号)
测试(模型)
在MongoDB中,我是否应该有一个包含许多TESTS的USER集合,或者将TESTS放在USER集合之外?
答案 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用户数据关系。这允许任何数量的测试,并且根据问题中的信息没有任何实际缺点。