1

ためのプッシュを作成するには、私の3つのスキーマです: ユーザー・スキーマ:マングースは、だからここに私のDBに入れ子構造のようなものを持っている複数のレフリー

var UserSchema = new mongoose.Schema({ 

    email: { 
     type: String, 
     lowercase: true, 
     unique: true, 
     required: true 
    }, 
    password: { 
     type: String, 
     required: true 
    }, 
    role: { 
     type: String, 
     enum: ['trainer', 'client', 'admin'], 
     default: 'client' 
    }, 
    trainer: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'User' 
    }, 
    programs: [ 
     { 
       type: mongoose.Schema.Types.ObjectId, 
       ref: 'Program' 
      } 
     ], 
    diet: [ 
    { 
     calories: { 
      type: Number 
     }, 
     protein: { 
      type: Number 
     }, 
     fats: { 
      type: Number 
     }, 
     carbs: { 
      type: Number 
     }, 
     fiber: { 
      type: Number 
     } 
    }], 
    stats: 
     { 
      bodyweight: 
       [ { 
        _id: false, 
        measurement:{ type: Number}, 
       time : { type : Date, default: Date.now } 
       } 
       ] 
     }, 
    name: { 
     type: String, 
     required: true 
    }, 

}, { 
    timestamps: true 
}); 

プログラムスキーマ:

var ProgramSchema = new mongoose.Schema({ 

    title: {type: String, required: true}, 
    description: {type: String, required: true}, 
    createdby: { 
     type: mongoose.Schema.Types.ObjectId, 
     ref: 'User' 
    }, 
    exercises: [ 
     { 
      exercise:{ 
       type: mongoose.Schema.Types.ObjectId, 
       ref: 'Exercise' 
      }, 
      sets:{ 
       type: Number 
      } 
     } 
     ] 
}, { 
    timestamps: true 
}); 

や運動スキーマ:

var ExerciseSchema = new mongoose.Schema({ 

    name: { 
     type: String, 
     lowercase: true, 
     unique: true, 
     required: true 
    }, 
    description: { 
     type: String, 
     required: true 
    }, 
    video: { 
     type: String 
    }, 
    image: { 
     type: String 
    } 

}, { 
    timestamps: true 
}); 

あなたが見ることができるように、ユーザは、多くのプログラムを持つことができ、プログラムを持つことができます多くの練習。しかし、私がユーザーオブジェクトを返すとき、populate関数を使用しても、ユーザープログラム内の演習には値が設定されません。私はこのプログラムをどのように作成するのか、私は理解しているから、プログラムにエクササイズオブジェクトをプッシュしなければならないと思っていますが、私はプログラムを作成して同時にそれにプッシュエクササイズする方法がわかりません。これは私のプログラムのプログラム機能を現在作成されています

exports.createProgram = function(req, res, next){ 

    Program.create({ 
     title : req.body.title, 
     description: req.body.description, 
     exercises: req.body.exercises, 
     createdby: req.body.createdby 

    }, function(err, program) { 

     if (err){ 
      res.send(err); 
     } 

     Program.find(function(err, programs) { 

      if (err){ 
       res.send(err); 
      } 

      res.json(programs); 

     }); 

    }); 

} 

は、私は多分req.body.exercisesにいくつかのちょっとのforEachの操作を行うことができます方法はありますか?また、ここでは、事前 で おかげで、私は、ユーザーを返す方法を示します。

exports.getClients = function(req, res, next){ 

     var trainerid = req.params.trainerid; 


    User.find({trainer: trainerid}) 
     .populate({ 
      path: 'programs', 
      populate: { path: 'exercises' } 
     }) 
     .exec(function (err, clients) { 
      if (err) return handleError(err); 
     console.log(clients); 
     res.json(clients); 
     }); 

} 
+0

あなたは 'req.body.exercises'を表示することができますか? –

答えて

1

私はあなたが右のパス上にあると思いますが、あなたは間違っpopulatedexerciseを持っています。 exercisesを入力する代わりに、exercises.exerciseを入力する必要があります。

はこれを試してみてください:

User.find({trainer: trainerid}) 
    .populate({ 
     path: 'programs', 
     populate: { path: 'exercises.exercise' } 
    }) 
    .exec(function (err, clients) { 
     if (err) return handleError(err); 
    console.log(clients); 
    res.json(clients); 
    }); 
+0

あなたは星です、どうもありがとうございます。私はこのアイデアを思いついたとは思っていません – Delboyeire

関連する問題