Mongoose填充多个嵌套文档
我搜索了高低,但无法弄清楚如何形成以下填充查询,首先是我的模型:
const CourseSchema = new Schema({
classes: [{ type: Schema.Types.ObjectId, ref: 'Classroom' }]
});
const ClassSchema = new Schema({
location: { type: mongoose.Schema.Types.ObjectId, ref: 'Location' },
instructors: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
});
我有一个获得单一课程的终点,但我想在classes
中填充location
字段和instructors
和classes
字段。现在,我可以填充classes
或location
中的教师字段,但我不能同时填充它们。这就是我现在所拥有的:
Course
.findById(req.params.courseId)
.populate({
path: 'classes',
populate: {
path: 'instructors',
model: 'User'
}
})
我怎样才能在location
中填充classes
字段?
谢谢。
回答如下:请在mongoose v4下尝试这个,这是关于Population
的一个很好的链接
Course
.findById(req.params.courseId)
.populate({
path: 'classes',
model: 'Classroom',
populate: {
path: 'instructors',
model: 'User'
}
})
.exec(function(err, cour) {
if (err)
console.log(err);
else {
Course.populate(cour,
{
path: 'classes.location',
model: 'Location',
}, function(err, c1) {
if (err)
console.log(err);
else
console.log(util.inspect(c1, { showHidden: true, depth: null }));
})
}
})
Mongoose填充多个嵌套文档
我搜索了高低,但无法弄清楚如何形成以下填充查询,首先是我的模型:
const CourseSchema = new Schema({
classes: [{ type: Schema.Types.ObjectId, ref: 'Classroom' }]
});
const ClassSchema = new Schema({
location: { type: mongoose.Schema.Types.ObjectId, ref: 'Location' },
instructors: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
});
我有一个获得单一课程的终点,但我想在classes
中填充location
字段和instructors
和classes
字段。现在,我可以填充classes
或location
中的教师字段,但我不能同时填充它们。这就是我现在所拥有的:
Course
.findById(req.params.courseId)
.populate({
path: 'classes',
populate: {
path: 'instructors',
model: 'User'
}
})
我怎样才能在location
中填充classes
字段?
谢谢。
回答如下:请在mongoose v4下尝试这个,这是关于Population
的一个很好的链接
Course
.findById(req.params.courseId)
.populate({
path: 'classes',
model: 'Classroom',
populate: {
path: 'instructors',
model: 'User'
}
})
.exec(function(err, cour) {
if (err)
console.log(err);
else {
Course.populate(cour,
{
path: 'classes.location',
model: 'Location',
}, function(err, c1) {
if (err)
console.log(err);
else
console.log(util.inspect(c1, { showHidden: true, depth: null }));
})
}
})