Wednesday, 15 March 2017

Issues accessing sub-documents with Mongoose

I am attempting to write a method that inserts a 'question' schema into the 'subject' schema within the following model:

COURSE
var mongoose = require('mongoose')
var subject = require('./subject.js');

var courseSchema = new mongoose.Schema({
   name: {type: String,
            unique: true,
            required: true},
   subjects: [subject.schema]
});
module.exports = mongoose.model('Course', courseSchema);


SUBJECT
var mongoose = require('mongoose')
var question = require('./question.js');

var subjectSchema = new mongoose.Schema({
   name : String,
   questions : [question.schema]
});

module.exports = mongoose.model('Subject', subjectSchema);

QUESTION
var mongoose = require('mongoose')

var questionSchema = new mongoose.Schema({
   question: {type: String, required: true},
   answer: {type: String, required: true},
   falseAnswer: [String]
});

module.exports = mongoose.model('Question', questionSchema);

However when adding an entry I am prompted with 'subjectid not found' here is the controller in charge of creating the entry.

var mongoose = require('mongoose');
var Course = mongoose.model('Course');
var Subject = mongoose.model('Subject');
var Question = mongoose.model('Question');

var sendJSONResponse = function(res, status, content){
   res.status(status);
   res.json({content});
};

var addQuestion = function(req, res, subject){
  if(!subject){
    sendJSONResponse(res, 404, {"message":"subjectid not found"});
    return;
  }
  else{
    subject.questions.push({question: req.body.question,
                            answer: req.body.answer,
                            falseAnswer: req.body.falseanswer});
    subject.save(function(err, course){
      var thisQuestion
      if(err){
        sendJSONResponse(res, 400, err);
      } else{
        thisQuestion = subject.questions[subject.questions.length - 1];
        sendJSONResponse(res, 201, thisQuestion);
      }
    });
  }
}

var seekSubject = function(req, res, course){
  if(req.params && req.params.subjectid){
    Subject.findById(req.params.subjectid).exec(function(err, subject){
      console.log(req.params.subjectid);
      if(!subject){
         //sendJSONResponse(res, 404, {"message":"subjectid not found"});
         console.log("subjectid not foujnd");
         return
      }
      else if(err){
         sendJSONResponse(res, 404, err);
         return;
      }
      //sendJSONResponse(res, 200, subject);
      return subject
      });
  } else{
     sendJSONResponse(res, 404, {
        "message":"no subjectid in request"
     });
  }
};

module.exports.makeQuestion = function(req, res){
    var courseid = req.params.courseid;
    if(courseid) Course.findById(courseid).select('subjects').exec(
      function(err, course){
        if(err){
          sendJSONResponse(res, 400, err);
          return;
        }
        else var subject =  seekSubject(req, res, course);
        console.log(subject);
        addQuestion(req, res, subject);
    });
}



via Tjoudrey

No comments:

Post a Comment