数据建模注意事项
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 对象包含问题中所写的“数据” - 但除此之外,您有一个普通用户有很多测试,测试属于用户数据关系。这允许进行任意数量的测试,并且考虑到问题中的信息,并没有任何真正的缺点。