Actualmente estoy aprendiendo sobre Mongoose y nodeJS. Tengo que crear una base de datos en la que se guarden las inscripciones a los cursos y las puntuaciones por curso de los alumnos. Cada asignatura también está vinculada a un profesor. Piensa en la estructura de la base de datos. Asegúrese de poder argumentar por qué está conectando datos a través de 'incrustar' o 'referencia'. Piense también en dónde usa índices e índices únicos.
La forma en que estoy pensando actualmente:
Intenté hacer los siguientes esquemas de mangosta:
StudentSchema:
const mongoose = require("mongoose"); const studentSchema = new mongoose.Schema({ name: { type: String, minLength: 3, trim: true, lowercase: true, validate: { validator: (value) => /^[az ]+$/.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 );Esquema del curso:
const mongoose = require("mongoose"); const courseSchema = new mongoose.Schema({ title: { type: String, minLength: 3, trim:true, lowercase:true, validate: { validator: (value) => /^[az ]+$/.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) => /^[az ]+$/.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 );Los problemas que estoy enfrentando actualmente:
Es realmente una cuestión de opinión.
Si necesita una identificación única por documento, debe dejar que Mongo lo maneje. Está ahí por una razón.
En mi opinión, agregaría una matriz de scores en el esquema courses .
const mongoose = require("mongoose"); const courseSchema = new mongoose.Schema({ title: { type: String, minLength: 3, trim:true, lowercase:true, validate: { validator: (value) => /^[az ]+$/.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) => /^[az ]+$/.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 );