我目前正在學習 Mongoose 和 nodeJS。我必須創建一個資料庫,其中保存了課程注冊和學生每門課程的分數。每個科目也與一位老師相關聯。想想資料庫的結構。確保您可以爭論為什么要通過“嵌入”或“參考”連接資料。還要考慮在哪里使用索引和唯一索引。
我目前的想法是:
- 一個學生有多個課程
- 一個課程有多個學生
- 學生在一門課程上有多個分數
- 一門課有一個老師
我嘗試制定以下貓鼬計劃:
學生架構:
const mongoose = require("mongoose");
const studentSchema = new mongoose.Schema({
name: {
type: String,
minLength: 3,
trim: true,
lowercase: true,
validate: {
validator: (value) => /^[a-z ] $/.test(value),
message: (props) => `${props.value} is not a valid name!`
},
required: [ true, "Name is required" ]
},
id: {
type: Number,
index: { unique: true },
min: [ 1, "ID must be greater than 0" ],
required: [ true, "ID is required" ]
},
courses : [ { type: mongoose.Schema.Types.ObjectId, ref: "Course" } ]
},
{ collection: "students" }
);
module.exports = mongoose.model("Student", studentSchema );
課程架構:
const mongoose = require("mongoose");
const courseSchema = new mongoose.Schema({
title: {
type: String,
minLength: 3,
trim:true,
lowercase:true,
validate: {
validator: (value) => /^[a-z ] $/.test(value),
message: (props) => `${props.value} is not a valid course title`
},
required: [true, "Course title is required"]
},
teacher: {
type: String,
minLength: 3,
trim: true,
lowercase: true,
validate: {
validator: (value) => /^[a-z ] $/.test(value),
message: (props) => `${props.value} is not a valid teacher name`
},
required: [true, "teacher is required"]
},
student : { type: mongoose.Schema.Types.ObjectId, ref: "Student" }
},
{ collection: "courses" }
);
module.exports = mongoose.model("Course", courseSchema );
我目前面臨的問題:
- 在 StudentSchema 中,我使用 Id,因為我想要 1,2,3,4 等而不是從 MongoDB 隨機生成的 id。這是正確的方法嗎?
- 如何將分數添加到資料庫中以及將它放在哪里?
uj5u.com熱心網友回復:
這真的是見仁見智。
如果您需要每個檔案的唯一 ID,您應該讓 Mongo 處理它。它的存在是有原因的。
在我看來,您應該scores在courses架構中添加一個陣列。
const mongoose = require("mongoose");
const courseSchema = new mongoose.Schema({
title: {
type: String,
minLength: 3,
trim:true,
lowercase:true,
validate: {
validator: (value) => /^[a-z ] $/.test(value),
message: (props) => `${props.value} is not a valid course title`
},
required: [true, "Course title is required"]
},
teacher: {
type: String,
minLength: 3,
trim: true,
lowercase: true,
validate: {
validator: (value) => /^[a-z ] $/.test(value),
message: (props) => `${props.value} is not a valid teacher name`
},
required: [true, "teacher is required"]
},
student : { type: mongoose.Schema.Types.ObjectId, ref: "Student" },
scores: [{
score: Number, // the grade
assignment_id: mongoose.Schema.Types.ObjectId// the id to the test/quiz/homework/etc.. which was graded
}],
// You could also just have an array of numbers (scores)
scores: { type: [Number] }
},
{ collection: "courses" }
);
module.exports = mongoose.model("Course", courseSchema );
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/374679.html
下一篇:MongoDB中的SQL等效查詢
