J'essaie de trouver un moyen de vérifier si un étudiant est signé pour un cours/s à l'aide de la mangouste.
J'ai ces schémas:
Cours de schéma:
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);
Ici je suis en enregistrant tous les étudiants qui ont signé le cours à l'intérieur des étudiants de tableau d'objets.
Étudiant schéma:
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);
Maintenant, je vais essayer de faire une requête qui renvoie une liste de cours que l'étudiant a signé pour.
Par exemple:
Si j'ai 3 cours = [les mathématiques, l'anglais, la programmation] et un étudiant avec l'id = 1 qui a signé (sur les élèves array) pour les mathématiques et l'anglais, la requête renvoie des mathématiques et des cours d'anglais.
J'ai essayé sans succès (obtention null, mais l'utilisateur est en étudiants tableau d'objets):
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);
}
});