使用node.js和mongoose从另一个引用文档填充数据

时间:2013-11-21 06:30:40

标签: node.js express mongoose

我正在构建一个运行课程的应用程序。每门课程都有单元。每个单元都有页面,问题和最后的测验。我以为我已经正确设置了所有内容,但是如果我查看单位列表,它只会显示ID并且不会填充。

模特:

var unitSchema = new Schema({
    number: Number,
    title:  String,
    unitCode:  String,
    pageCount: Number,
    time: Number
});
var pageSchema = new Schema({
    number: Number,
    title:  String,
    content: String,
    courseQ: Boolean,
    unitCode: String
});
var courseQuestionSchema = new Schema({
    question: String,
    choices: [],
    correct: Number
});
var quizSchema = new Schema({
    code: String,
    questions: [{
        question: String,
        choices: [],
        correct: Number
    }]
});
var courseSchema = new Schema({
    name: String,
    code:   String,
    state: String,
    instructor:   String,
    agency: String,
    providerNumber: String,
    schoolNumber: String,
    price: {type: Number, get: getPrice, set: setPrice },
    available: Boolean,
    units : [{ type : Schema.ObjectId, ref : 'unitSchema' }],
    pages : [{ type : Schema.ObjectId, ref : 'pageSchema' }],
    cQuestions : [{ type : Schema.ObjectId, ref : 'courseQuestionSchema' }],
    quizzes : [{ type : Schema.ObjectId, ref : 'quizSchema' }]
});

Schema.statics:

unitSchema.statics = {

    list: function (options, cb) {
        var criteria = options.criteria || {};

        this.find(criteria)
            .populate('units')
            .exec(cb)
    }

}

控制器:

exports.coursesUnits = function(req, res){
    var options = {
        criteria: { 'id':req.param('units',req.course.units.id)}
    };

    Courses.list(options, function(err, units) {
        if (err) return res.render('500');
        res.render('admin/courses/units', {
            title: '',
            description: '',
            units: req.course.units,
            course: req.course,
            active: 'courses', active2: 'course-list', active3: ''
        })
    })
};

我花了整整一周的时间寻找解决这个问题的方法,但没有运气。提前感谢任何指向正确的方向。

1 个答案:

答案 0 :(得分:1)

我很抱歉。我觉得你搞砸了你的模特。属性“ref”仅适用于其他模型,而不适用于模式。

你必须首先使用mongoose.model('Quiz',quizSchema)创建一个模型

之后你可以参考'测验'。

这样就可以使用objectId为测验创建一个新集合并对其进行引用。

以下是文档:http://mongoosejs.com/docs/populate.html