Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

653
Vistas
¿Cómo unir/llenar 3 tablas con una a muchas relaciones en MongoDB/Mongoose?

Mi esquema se ve así:

Profesor.js

 const teacherSchema = new mongoose.Schema( { name: { type: String, required: true, unique: true, }, }, { timestamps: true, } ); teacherSchema.virtual('students', { ref: 'Student', localField: '_id', foreignField: 'teacher', justOne: false }) const Teacher = mongoose.model('Teacher', teacherSchema);

Estudiante.js

 const studentSchema = new mongoose.Schema( { name: { type: String, required: true, }, teacher: { type: mongoose.Schema.Types.ObjectId, ref: 'Teacher', required: true, }, }, { timestamps: true, } ); menuItemSchema.virtual('courses', { ref: 'Course', localField: '_id', foreignField: 'student', justOne: false }) const Student = mongoose.model('Student', studentSchema);

Curso.js

 const courseSchema = new mongoose.Schema( { name: { type: String, required: true, }, student: { type: mongoose.Schema.Types.ObjectId, ref: 'Student', required: true, } }, { timestamps: true, } ); mongoose.model('Course', coursesSchema)

En mi enrutador, quiero crear un objeto que tenga el siguiente aspecto y devolvérselo al usuario:

 { <teacherName>: [ <studentName1>: [<courseName1>, <courseName2>, <courseName3>], <studentName2>: [<courseName1>, <courseName2>, <courseName3>] ] }

Para realizar esto, necesito hacer una unión múltiple entre las 3 tablas. ¿Cuál es la forma más eficiente de hacer esto?

En el caso de solo dos tablas hago:

 const teacherWithStudents = await (await Teacher.findOne({_id: req.params.teacherId}).populate('students')).execPopulate()

Sin embargo, dado que hay otra tabla, también hay forma de completar los cursos de los estudiantes para que puedan acceder a los 3: el maestro, sus estudiantes y cada uno de sus cursos.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede profundizar más con .populate() de la siguiente manera:

 Teacher.findOne({_id: req.params.teacherId}) .populate({ path: 'students', populate: { path: 'courses' } }) .exec(function(err, docs) {});

Documentación adicional: https://mongoosejs.com/docs/populate.html#deep-populate

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda