我最近开始深入了解服务器方面,正在开发一款应用程序,我需要考虑如何规划模型。
我的用户是教师,在仪表板中可以创建学生列表。我的模式将包含更多指令以防止重复创建,但我在这里简化了它们。这是我到目前为止所做的尝试:
// Teacher Model
const Teacher = new Schema({
fname: String,
lname: String,
email: String,
})
// Student Model
const Student = new Schema({
fname: String,
lname: String,
full: String,
uuid: String
grades: {
classwork: Array,
quizzes: Array,
tests: Array
}
})
在这里,我对后端工作缺乏经验。这个设置对我来说并没有多大意义。说当我去保存学生时,它将在数据库中的学生集合下创建一个新学生。这并不理想,因为学生应该以创建它的老师严格访问的方式存储。
我正在考虑在我的教师模式中创建一个名为"学生"(这将是一个数组)的新密钥,每次创建时都会将学生推入其中。
我正确地计划这一点非常重要,因为教师将来会有更多的能力,比如创建作业,给学生评分等等。我想用最佳实践来设计这个请记住,确保教师数据对其他用户是安全的。
答案 0 :(得分:2)
在mongo模型中使用嵌套数组并不是那么顺利。 我可以建议考虑这个数组的大小。
如果您的阵列有可能增长 - 请不要使用它。
我对您的数据库设计的建议很简单。
将teacherId
添加到学生模型中。
这样,当您需要根据特定教师获取学生列表时 - 您可以通过teacherId
轻松查询。
所以你的学生模式修改会这样:
const Student = new Schema({
teacherId: {
type: mongoose.Schema.Types.ObjectId,
index: true,
required: true
},
fname: String,
lname: String,
full: String,
uuid: String
grades: {
classwork: Array,
quizzes: Array,
tests: Array
}
});
答案 1 :(得分:2)
我不同意@Lazyexpert。 MongoDB是一个非关系型数据库 您可以存储每个文档16Mb的数据。这真的足以满足您的需求
最大BSON文档大小为16兆字节。最大文档大小有助于确保单个文档不会使用过多的RAM,或者在传输过程中使用过多的带宽。为了存储大于最大大小的文档,MongoDB提供了GridFS API。
即:https://docs.mongodb.com/manual/reference/limits/
所以我建议您直接在老师中添加每个学生的数据。
您可以在此处找到一些提示:https://www.safaribooksonline.com/library/view/50-tips-and/9781449306779/ch01.html
所以你的模型应该是这样的:
public $accountTypeFlag;
.......
public function getSecondType() {
if (($this->$accountTypeFlag == 1)){
return array (self::CURRENT_ASSETS=>'Current Assets',self::PROPERTY_AND_EQUIPMENT=>'Property and Equipment',self::OTHER_ASSETS=>'Other Assets');
}
if (($accountTypeFlag == 2)){
return array (self::CURRENT_LIABILITIES=>'Current Liabilities');
}
if (($accountTypeFlag == 3)){
return array (self::FUND_BALANCE=>'Fund Balance');
}
}
如果你绝对想要一个学生集合,那么在学生模式的“保存”操作中使用“post”中间件。像这样:
const Teacher = new Schema({
fname: String,
lname: String,
email: String,
students : [
{
fname: String,
lname: String,
full: String,
uuid: String
grades: {
classwork: Array,
quizzes: Array,
tests: Array
},
},
],
})
即:mongoosejs.com/docs/api.html#schema_Schema-post
祝你好运:)