由于从用户模型到课程模型没有任何引用,因此需要使用虚拟填充。
用户模型:
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",{
"_id": "5dc84911b1f1bd0b20358143","user": "5dc84876b1f1bd0b2035813b"
}
],{
"_id": "5dc84969b1f1bd0b20358145","code": "Course 3 code","joined": [
{
"_id": "5dc84969b1f1bd0b20358149",{
"_id": "5dc84969b1f1bd0b20358148",{
"_id": "5dc84969b1f1bd0b20358147","user": "5dc8487fb1f1bd0b2035813c"
},{
"_id": "5dc84969b1f1bd0b20358146","user": "5dc84888b1f1bd0b2035813d"
}
],"__v": 0
}
],"id": "5dc84862b1f1bd0b2035813a"
}
虚拟填充文档:
https://mongoosejs.com/docs/populate.html#populate-virtuals
本文链接:https://www.f2er.com/3128536.html