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

239
Vistas
cómo encontrar usando la consulta de mangosta si el usuario está dentro de una matriz de usuarios

Estoy tratando de encontrar una manera de verificar si un estudiante está registrado en un curso usando mangosta.

Tengo estos esquemas:

esquema del curso :

 const mongoose = require("mongoose"); const User = require("../models/User"); const CourseSchema = new mongoose.Schema( { courseName: { type: String, required: true, unique: true }, teacher: { teacherName: { type: String }, teacherID: { type: mongoose.Schema.Types.ObjectId, ref: "User", }, }, students: [ { studentName: { type: String }, studentID: { type: mongoose.Schema.Types.ObjectId, ref: "User", }, }, ], }, { collection: "courses" }, { timestamps: true } ); module.exports = mongoose.model("Course", CourseSchema);

Aquí estoy guardando a todos los estudiantes que firmaron el curso dentro de la matriz de objetos de los estudiantes .

esquema del estudiante:

 const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema( { username: { type: String, required: true, unique: true }, email: { type: String, required: true, unique: true }, password: { type: String, required: true }, userType: { type: String, enum: ["student", "teacher"], default: "student", }, isOnline: { type: Boolean, default: false }, }, { collection: "users" }, { timestamps: true } ); module.exports = mongoose.model("User", UserSchema);

Ahora estoy tratando de hacer una consulta que devolverá una lista de cursos en los que se inscribió el estudiante.

Por ejemplo:

Si tengo 3 cursos = [matemáticas, inglés, programación] y un estudiante con id = 1 que firmó (está en la matriz de estudiantes) para matemáticas e inglés, entonces la consulta devolverá cursos de matemáticas e inglés.

Intenté esto sin éxito (obteniendo nulo, pero el usuario está en la matriz de objetos de los estudiantes):

 router.post("/:id", async (req, res) => { try { // get user var user = await User.findOne({ username: req.body.username, email: req.body.email, password: req.body.password, }); // search user courses by user id. const coursesList = await Course.find({ students: { $in: [{ studentID: user._id, studentName: user.username }], }, }); res.status(200).json(coursesList); } catch (err) { res.status(500).json(err.message); } });
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puedes hacerlo así:

 const coursesList = await Course.find({ "students.studentID": user._id });

ejemplo de trabajo

about 4 years ago · Juan Pablo Isaza Denunciar

0

Si solo desea devolver el usuario coincidente, puede usar la canalización de agregación. Demostración en vivo aquí

Base de datos

 [ { "course": "Math", "students": [ { studentID: "id_1", studentName: "Name 1" }, { studentID: "id_2", studentName: "Name 2" } ] }, { "course": "English", "students": [ { studentID: "id_1", studentName: "Name 1" }, { studentID: "id_3", studentName: "Name 3" } ] }, { "course": "Programming", "students": [ { studentID: "id_4", studentName: "Name 4" }, { studentID: "id_5", studentName: "Name 5" } ] }, ]

Consulta

 db.collection.aggregate([ { $unwind: "$students" }, { $match: { "students.studentID": "id_1" } } ])

Resultado

 [ { "_id": ObjectId("5a934e000102030405000000"), "course": "Math", "students": { "studentID": "id_1", "studentName": "Name 1" } }, { "_id": ObjectId("5a934e000102030405000001"), "course": "English", "students": { "studentID": "id_1", "studentName": "Name 1" } } ]
about 4 years ago · Juan Pablo Isaza 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