Доступ к значениям Schema.Types.ObjectId с помощью Mongoose
Привет, я изучаю MongoDB и как использовать Mongoose,
Я пытаюсь создать простое приложение Workout manager, в котором у тренировок есть имя (например, "Upper Body"), учетная запись электронной почты (которая используется для определения того, кто создал тренировку) и массив упражнений, состоящий из ссылок на упражнения.
Я хочу, чтобы у меня был запрос, в котором я мог бы получить доступ к названию упражнения (например, "Отжимания"), используя только имя тренировки.
Моя модель workout.js:
var mongoose = require('mongoose');
const Schema = mongoose.Schema;
var Exercise = require('./exercise');
const workoutSchema = new Schema({
title: {type: 'String', required: true},
email: {type: 'String', required: true},
exercises: [{ type: Schema.Types.ObjectId, ref: 'Exercise' }],
});
module.exports = mongoose.model('Workout', workoutSchema);
Моя модель упражнений.js:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var exerciseSchema = new mongoose.Schema({
title: {type: String, required: true}
}, {
timestamps: true
});
module.exports = mongoose.model('Exercise', exerciseSchema);
Мой Тренировочный Контроллер выглядит так:
var Workout = require('../models/workout');
var Exercises = require('../models/exercise');
exports.getWorkoutExercises = function(req, res) {
Workout.findOne({ title: req.params.workout_name})
.populate('exercises')
.exec((err, exercises) => {
if (err){
res.send(err);
}
/* I want to be able to return or access the exercises title */
res.json({exercises.title});
});
}
В моем rout.js у меня есть это:
workoutRoutes.get('/:workout_name', WorkoutController.getWorkoutExercises);
Любая помощь или советы высоко ценится!
1 ответ
Я не уверен, что вы сделали здесь res.json({exerc.title}); Вы можете попробовать это? Надеюсь, что это работает
Workout.findOne({ title: req.params.workout_name})
.populate('exercises')
.exec((err, workout) => {
if (err){
res.send(err);
} else {
res.send({ exercises: workout.exercises });
}
});
А затем на стороне клиента вы можете выполнить итерацию массива упражнений и получить доступ к названию упражнения.