Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

195
Views
Pregunta sobre la estructura de la base de datos MongoDB (Mongoose)

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:

  • Un estudiante tiene varios cursos.
  • Un curso tiene varios estudiantes.
  • Un estudiante tiene múltiples puntajes en un curso
  • Un curso tiene un profesor

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:

  1. En StudentSchema, estoy usando una identificación porque quiero 1,2,3,4, etc. en lugar de una identificación generada aleatoriamente de MongoDB. ¿Es esta la forma correcta de hacerlo?
  2. ¿Cómo agrego puntajes a la base de datos y dónde los colocaría?
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

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 );
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!