Mongoose填充多个嵌套文档

时间:2016-03-02 08:45:42

标签: node.js mongodb 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中的instructorsclasses字段。现在,我可以填充classeslocation中的教师字段,但我无法同时填充这两个字段。这就是我现在所拥有的:

    Course
        .findById(req.params.courseId)
        .populate({
            path: 'classes',
            populate: {
                path: 'instructors',
                model: 'User'
            }
        })

如何填充location中的classes字段?

感谢。

3 个答案:

答案 0 :(得分:39)

兴趣替代方案是将数组传递给嵌套的填充。

Course
    .findById(req.params.courseId)
    .populate({
        path: 'classes',
        model: 'Classroom',
        populate: [{
            path: 'instructors',
            model: 'User'
        },
        {
            path: 'location',
            model: 'Location'
        }]
    })

答案 1 :(得分:5)

请在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 }));                       
                    })
            }
        })

答案 2 :(得分:2)

- (NSUInteger)supportedInterfaceOrientations
{
return (UIInterfaceOrientationMaskAllButUpsideDown);
//OR return (UIInterfaceOrientationMaskAll);
}