【发布时间】:2026-02-21 13:45:01
【问题描述】:
我目前正在学习 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。这是正确的做法吗?
- 如何将分数添加到数据库中以及将其放置在哪里?
【问题讨论】:
标签: node.js database mongodb mongoose