title: message: path is required
body: <p>Hi I'm trying to create a new subdocument via mongoose, but i'm getting the following messages when I execute the POST method in Postman:</p>
  
  <pre><code>{
    "message": "Location validation failed",
    "name": "ValidationError",
    "errors": {
      "reviews.1.reviewText": {
        "message": "Path `reviewText` is required.",
        "name": "ValidatorError",
        "properties": {
          "type": "required",
          "message": "Path `{PATH}` is required.",
          "path": "reviewText"
        },
        "kind": "required",
        "path": "reviewText"
      },
      "reviews.1.rating": {
        "message": "Path `rating` is required.",
        "name": "ValidatorError",
        "properties": {
          "type": "required",
          "message": "Path `{PATH}` is required.",
          "path": "rating"
        },
        "kind": "required",
        "path": "rating"
      },
      "reviews.1.author": {
        "message": "Path `author` is required.",
        "name": "ValidatorError",
        "properties": {
          "type": "required",
          "message": "Path `{PATH}` is required.",
          "path": "author"
        },
        "kind": "required",
        "path": "author"
      }
    }
  }
  </code></pre>
  
  <p>Here is my DB Schema for Locations:</p>
  
  <pre><code>var mongoose = require('mongoose');
  
  var reviewSchema = new mongoose.Schema({
      author: {type: String, required: true},
      rating: {type: Number, required: true, min: 0, max: 5},
      reviewText: {type: String, required: true},
      createdOn: {type: Date, "default": Date.now}
  });
  
  var openingTimeSchema = new mongoose.Schema({
      days: {type: String, required: true},
      opening: String,
      closing: String,
      closed: {type: Boolean, required: true}
  });
  
  var locationSchema = new mongoose.Schema({
      name: {type: String, required: true},
      address: String,
      rating: {type: Number, "default":0, min: 0,  max: 5},
      facilities: [String],
      coords: {type: [Number], index:'2ndsphere'},
      openingTimes: [openingTimeSchema],
      reviews: [reviewSchema]
  });
  
  mongoose.model('Location', locationSchema);
  </code></pre>
  
  <p>Here the controller launched under <em>router.post('/locations/:locationid/reviews', ctrlReviews.reviewsCreate);</em> routing:</p>
  
  <pre><code>//reviews.js
  var mongoose = require('mongoose');
  var Loc = mongoose.model('Location');
  
  module.exports.reviewsCreate = function (req, res) {
      var locationid = req.params.locationid;
      if(locationid){
          Loc
              .findById(locationid)
              .select('reviews')
              .exec(
                  function(err, location){
                      if(err){
                          sendJsonResponse(res, 400, err);
                      } else{
                          console.log(location);
                          doAddReview(req, res, location);
                      }
                  }
              );
      } else{
          sendJsonResponse(res, 400, {
              "message" : "Not found, locationid required"
          });
      }
  };
  // START - Functions for review create  //////////////////////////////////////
  var doAddReview = function(req, res, location){
      if(!location){
          sendJsonResponse(res, 404, "locationid not found");
      } else{
          location.reviews.push({
              author: req.body.author,
              rating: req.body.rating,
              reviewText: req.body.reviewText
          });
  
          location.save(function(err, location){
              var thisReview;
              if(err){
                  //sendJsonResponse(res, 400, err);
                  sendJsonResponse(res, 400, err);
              } else{
                  updateAverageRating(location._id);
                  thisReview = location.reviews[location.reviews.length - 1];
                  sendJsonResponse(res, 201, thisReview);
              }
          }); 
      }
  };
  
  var updateAverageRating = function(locationid){
      console.log("Update rating average for", locationid);
      Loc
          .findById(locationid)
          .select('reviews')
          .exec(
              function(err, location){
                  if(!err){
                      doSetAverageRating(location);
                  }
              }
          );
  };
  
  var doSetAverageRating = function(location){
      var i, reviewCount, ratingAverage, ratingTotal;
      if(location.reviews &amp;&amp; location.reviews.length &gt; 0){
          reviewCount = location.reviews.length;
          ratingTotal = 0;
          for(i=0; i&lt;reviewCount; i++){
              ratingTotal = ratingTotal + location.reviews[i].rating;
          }
          ratingAverage = parseInt(ratingTotal / reviewCount, 10);
          location.rating = ratingAverage;
          location.save(function(err){
              if(err){
                  console.log(err);
              } else{
                  console.log("Average rating updated to", ratingAverage);
              }
          });
      }
  };
  </code></pre>
  
  <p>I've seen that error pops when the location.save function is executed. I'm learning MEAN Stack from a book, so you'll be able to download the complete code for this chapter here: <a href="https://github.com/simonholmes/getting-MEAN/tree/chapter-06" rel="noreferrer">https://github.com/simonholmes/getting-MEAN/tree/chapter-06</a></p>
  
  <p>I've tried replacing the code of my locations.js and reviews.js files from app_api/controllers folder, but at this point the application crashes, I guess because other files needs to be updated so.
  So I'm stuck there. </p>
  
  <p>Does anyone understand why it would be happening?</p>
  
  <p>Thanks in advance!</p>