Поскольку у вас нет ссылки от модели пользователя на модель курса, вам необходимо использовать виртуальное заполнение.
модель пользователя:
const mongoose = require("mongoose");
const UserSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true,
unique: true
}
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true }
});
// Virtual populate
UserSchema.virtual('courses', {
ref: 'course',
foreignField: 'joined.user',
localField: '_id'
});
module.exports = User = mongoose.model("user", UserSchema);
После этого вы можете использовать маршрутнапример, для заполнения курсов данного пользователя:
router.get("/user/:id/courses", async (req, res) => {
try {
let userCourses = await User.findById(req.params.id).populate({ path: "courses" });
res.status(200).send(userCourses);
} catch (err) {
console.log(err);
res.status(500).send(err);
}
});
Результат будет примерно таким:
{
"_id": "5dc84862b1f1bd0b2035813a",
"name": "User 1 name",
"email": "user1@gmail.com",
"__v": 0,
"courses": [
{
"_id": "5dc848f2b1f1bd0b2035813e",
"code": "Course 1 code",
"joined": [
{
"_id": "5dc848f2b1f1bd0b20358141",
"user": "5dc84862b1f1bd0b2035813a"
},
{
"_id": "5dc848f2b1f1bd0b20358140",
"user": "5dc84876b1f1bd0b2035813b"
},
{
"_id": "5dc848f2b1f1bd0b2035813f",
"user": "5dc8487fb1f1bd0b2035813c"
}
],
"__v": 0
},
{
"_id": "5dc84911b1f1bd0b20358142",
"code": "Course 2 code",
"joined": [
{
"_id": "5dc84911b1f1bd0b20358144",
"user": "5dc84862b1f1bd0b2035813a"
},
{
"_id": "5dc84911b1f1bd0b20358143",
"user": "5dc84876b1f1bd0b2035813b"
}
],
"__v": 0
},
{
"_id": "5dc84969b1f1bd0b20358145",
"code": "Course 3 code",
"joined": [
{
"_id": "5dc84969b1f1bd0b20358149",
"user": "5dc84862b1f1bd0b2035813a"
},
{
"_id": "5dc84969b1f1bd0b20358148",
"user": "5dc84876b1f1bd0b2035813b"
},
{
"_id": "5dc84969b1f1bd0b20358147",
"user": "5dc8487fb1f1bd0b2035813c"
},
{
"_id": "5dc84969b1f1bd0b20358146",
"user": "5dc84888b1f1bd0b2035813d"
}
],
"__v": 0
}
],
"id": "5dc84862b1f1bd0b2035813a"
}
Виртуальные документы для заполнения:
https://mongoosejs.com/docs/populate.html#populate-virtuals