Я работаю над административной системой для управления курсами и их учебными пособиями.Запрос связанных документов
Скажем, у меня есть следующие схемы:
var TutorialSchema = new mongoose.Schema({
number: { type: String, required: true }
});
var CourseSchema = new mongoose.Schema({
name: { type: String, required: true },
code: { type: String, required: true, unique: true },
tutorials: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Tutorial' }]
});
Каждый курс имеет имя, например, Введение в веб-программирование и уникальный код, например. CSCC09. В каждом учебнике есть неуникальный номер, например. 0001. На двух курсах будут обучаться те же номера. Однако каждый учебник в курсе будет иметь другое число.
В настоящее время, когда пользователь переходит редактировать учебник, он идет по следующему маршруту:
router.get('/courses/:code/tutorials/:number/edit', function (req, res) {
Course.findOne({
code: req.params.code
}).populate({
path: 'tutorials', match: { number: req.params.number }
}).exec(function (err, course) {
res.render('admin/tutorial', { course: course, tutorial: course.tutorials[0], method: 'put' });
});
});
Причина, почему я делаю это таким образом, чтобы гарантировать, что учебник соответствует для соответствующего курса.
Итак, для моего вопроса есть ли более простой способ запроса связанных моделей?
Я бы предпочел, чтобы сделать что-то вроде ниже, но я не могу, потому что учебник, который подобран не может быть для соответствующего курса:
Course.findOne({ code: req.params.code}, function (err, course) {
Tutorial.findOne({ number: req.params.number }, function (err, tutorial) {
// ...
});
});
Я знаю, что я могу использовать идентификаторы документов, однако я ищу, чтобы иметь читаемые URL-адреса (чтобы пользователи могли быстро перейти на страницы из строки URL-адреса браузера).