2015-08-09 2 views
1

Я ищу, чтобы создать отношения один-ко-многим следуя этой схеме http://docs.mongodb.org/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/MongoDB/mongoose создает связь между двумя моделями?

У меня есть Exercise.js схему, которая будет содержать набор упражнений.

var exerciseSchema = new mongoose.Schema({ 

    _id: String, 
    title: String, 
    description: String, 
    video: String, 
    sets: Number, 
    reps: String, 
    rest: Number 

}); 

Тогда у меня есть план тренировки BeginnerWorkout.js схемы

var workoutDaySchema = new mongoose.Schema({ 

    _id: String, 
    day: Number, 
    type: String, 
    exercises: Array 

}); 

Я хочу, чтобы связать множество упражнений с workoutDaySchema, это содержит набор дни тренировок для конкретной тренировки, каждый день имеет сбор упражнений.

У меня есть функция сеялки, которая создает тренировку для меня.

check: function() { 

    // builds exercises 
    Exercise.find({}, function(err, exercises) { 
     if(exercises.length === 0) { 
      console.log('there are no beginner exercises, seeding...'); 
      var newExercise = new Exercise({ 
       _id: 'dumbbell_bench_press', 
       title: 'Dumbbell Bench Press', 
       description: 'null', 
       video: 'null', 
       sets: 3, // needs to be a part of the workout day!! 
       reps: '12,10,8', 
       rest: 1 
      }); 
      newExercise.save(function(err, exercises) { 
       console.log('successfully inserted new workout exercises: ' + exercises._id); 
      }); 
     } else { 
      console.log('found ' + exercises.length + ' existing beginner workout exercises!'); 
     } 
    }); 


    // builds a beginner workout plan 
    BeginnerWorkout.find({}, function(err, days) { 
     if(days.length === 0) { 
      console.log('there are no beginner workous, seeding...'); 
      var newDay = new BeginnerWorkout({ 
       day: 1, 
       type: 'Full Body', 
       exercises: ['dumbbell_bench_press'] // here I want to pass a collection of exercises. 
      }); 
      newDay.save(function(err, day) { 
       console.log('successfully inserted new workout day: ' + day._id); 
      }); 
     } else { 
      console.log('found ' + days.length + ' existing beginner workout days!'); 
     } 
    }); 

} 

Так что мой вопрос внутри здания тренировки плана, как я могу связать упражнения с exercises Into ключа, используя мангуст?

ответ

1

Попробуйте это:

exercises: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Exercise', required: false }] 

И добавить упражнения для тренировки с использованием exercise._id (В коде выше вы должны были бы сделать это в соответствующей функции обратного вызова, такие как функции обратного вызова для .save на упражнение):

newDay.exercises.push(newExercise._id); 

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

Когда вы .find() тренируете, вам также нужно заполнить упражнения. Что-то вроде:

BeginnerWorkout.find({}). 
    .populate('exercises') 
    .exec(function(err, exercises) { 
    //etc 
+0

Круто спасибо, так где передать идентификатор упражнения, то есть 'dumbbell_bench_press'? –

+0

На самом деле, это не совсем понятно для меня. Я хочу дать вам зеленый чек, но мне нужна помощь, чтобы понять, где «упражнение» действительно отображается на тренировку? Если конкретное упражнение имеет id 'dumbbell_bench_press', я хочу связать это упражнение с 1-й день тренировки. –

+0

Я обновил ответ, чтобы показать шоу, вы можете добавить ссылки, нажав _id в массив упражнений –

Смежные вопросы