मैं कोशिश कर रहा हूँ करने के लिए एक रास्ता खोजने अगर जाँच करने के लिए एक छात्र है पर हस्ताक्षर किए के लिए एक पाठ्यक्रम/एस का उपयोग कर mongoose.
मैं इन स्कीमा:
पाठ्यक्रम स्कीमा:
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);
यहाँ मैं बचत कर रहा हूँ के सभी छात्रों पर हस्ताक्षर किए है कि पाठ्यक्रम के अंदर छात्रों वस्तुओं की सरणी.
छात्र स्कीमा:
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);
अब मैं कोशिश कर रहा हूँ एक क्वेरी बनाने के लिए वापस आ जाएगी कि पाठ्यक्रम की एक सूची है, जो छात्र के लिए हस्ताक्षर किए.
उदाहरण के लिए:
अगर मैं 3 पाठ्यक्रम = [गणित, अंग्रेजी, प्रोग्रामिंग] और एक छात्र के साथ आईडी = 1, जो पर हस्ताक्षर किए (में छात्रों सरणी) के लिए गणित और अंग्रेजी में है, तो क्वेरी वापस आ जाएगी गणित और अंग्रेजी के पाठ्यक्रमों.
मैंने कोशिश की है बिना यह सफलता (अशक्त हो रही है, लेकिन उपयोगकर्ता में छात्रों वस्तुओं की सरणी):
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);
}
});