我正在根据测验创建一个应用程序。每个测验都包含某些属性和轮次。同样,每一轮都包含某些属性和问题。每个问题也包含许多属性。
我最初创建了一个数据库方案,该方案涉及多个集合(测验,回合和问题),其中的字段将其与其相应的父级相关联,例如每一轮都会存储相关的测验。 ID。
然而,我遇到了猫鼬'子文档的概念(http://mongoosejs.com/docs/subdocs.html),并认为这将使我的项目更好的关系。因此,在重新构建我的应用程序之后,我发现第三级(问题)的子文档没有生成自己的唯一ID - ID是其父级的(圆形)。
生成数据库的屏幕截图。
我是以错误的方式解决这个问题吗?可以将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);
});
});
};