Încerc să găsesc o modalitate de a verifica dacă un elev este semnat pentru un curs/s folosind mangusta.
Am aceste scheme:
Cursul schema:
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);
Aici sunt salvarea tuturor elevilor care au semnat în interiorul elevii serie de obiecte.
Student schema:
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);
Acum încerc să fac o interogare care va returna o lista cursurilor pe care studentul a semnat pentru.
De exemplu:
Dacă am 3 cursuri = [matematica, engleza, programare] și un student cu id = 1 care a semnat (în studenți matrice) pentru matematică și limba engleză, atunci interogarea va returna matematică și cursuri de limba engleză.
Am încercat, fără succes (obtinerea null, dar utilizatorul nu este în studenți serie de obiecte):
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);
}
});