Доступ к значениям 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 });
        }
});

А затем на стороне клиента вы можете выполнить итерацию массива упражнений и получить доступ к названию упражнения.

Другие вопросы по тегам