没有使用唯一ID创建的mongoose子文档

时间:2014-03-25 19:58:49

标签: node.js mongodb express mongoose

我正在根据测验创建一个应用程序。每个测验都包含某些属性和轮次。同样,每一轮都包含某些属性和问题。每个问题也包含许多属性。

我最初创建了一个数据库方案,该方案涉及多个集合(测验,回合和问题),其中的字段将其与其相应的父级相关联,例如每一轮都会存储相关的测验。 ID。

然而,我遇到了猫鼬'子文档的概念(http://mongoosejs.com/docs/subdocs.html),并认为这将使我的项目更好的关系。因此,在重新构建我的应用程序之后,我发现第三级(问题)的子文档没有生成自己的唯一ID - ID是其父级的(圆形)。

生成数据库的屏幕截图。Resulting database

我是以错误的方式解决这个问题吗?可以将mongoose子文件用于这个数量的水平吗?任何指导都将不胜感激。

计划代码:

/* Questions */

var questionSchema = mongoose.Schema({
    displayOrder: { type: Number, default: 0 }, 
    questionText: { type: String, default: 'Question' }, 
    answer: { type: String, default: 'Answer' }, 
    points: { type: Number, default: 1 }, 
    timeInSeconds: { type: Number, default: 10 }
});

var Question = mongoose.model('Question', questionSchema);
exports.Question = Question;

/* Rounds */

var roundSchema = mongoose.Schema({
    title: { type: String, default: 'New round' }, 
    displayOrder: { type: Number, default: 0 }, 
    questions: [questionSchema]
});

var Round = mongoose.model('Round', roundSchema);
exports.Round = Round;

/* Quizzes */

var quizSchema = mongoose.Schema({
    title: { type: String, required: true, default: 'New quiz' }, 
    rounds: [roundSchema]
});

var Quiz = mongoose.model('Quiz', quizSchema);
exports.Quiz = Quiz;

Resftul API代码(部分):

exports.addQuiz = function(req, res) {
    var quiz = new db.Quiz({
        title: 'Quiz'
    });
quiz.save();    
    return res.redirect('/admin/quiz/edit/' + quiz._id);
};

exports.addRound = function(req, res, next) {
    db.Quiz.findOne({ _id: req.params.quizId }, function(err, foundQuiz) {
    var round = foundQuiz.rounds.create();
        foundQuiz.rounds.push(round);
        foundQuiz.save(function(err) {
            return res.json(round);         
        });
    });
};

exports.addQuestion = function(req, res, next) {
    db.Quiz.findOne({ _id: req.params.quizId }, function(err, foundQuiz) {
        var round = foundQuiz.rounds.id(req.params.roundId),
        question = round.questions.create();
        round.questions.push(round);
        foundQuiz.save(function(err) {
            return res.json(question);          
        });
    });
};

0 个答案:

没有答案