Atache
Atache

Reputation: 169

Having trouble pushing sub document to parent array

I have a users model which includes a locationsSchema in it:

const locationSchema = require('./location.js');

const userSchema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    required: true,
  },
  token: {
    type: String,
    require: true,
  },
  locations:  [locationSchema],
  passwordDigest: String,
}, {
  timestamps: true,
});   

My locations model is :

const mongoose = require('mongoose');

const locationSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  city: {
    type: String,
  },
  region: {
    type: String,
  },
  country: {
    type: String,
  },
  coords: {
    lat: {
      type: Number,
      require: true
    },
    long: {
      type: Number,
      require: true
    },
  },
  visited: {
    type: Boolean,
    require: true,
    default: false,
  },
  comment: {
    type: String,
  },
}, {
  timestamps: true,
});

and finally the create action in my controller for locations is:

const controller = require('lib/wiring/controller');
const models = require('app/models');
const User = models.user;
const Location = models.location;


const create = (req, res, next) => {
  User.findById(req.body.user.id).then (function(user){
    let location = Object.assign(req.body.location);
    user.locations.push(location);
    return user.save();
  })
  .then(user => res.json({ user }))
  .catch(err => next(err));
};    

When I try to send a curl POST request to locations I get:

{"error":{"message":"this._schema.caster.cast is not a function","error":{}}}

console.logging user, user.locations, and locations just before the user.locations.push(location); line returns exactly what I'd expect. I'm fairly certain the error is stemming from the push function call. Any insight would be much appreciated.

Upvotes: 0

Views: 69

Answers (1)

karthick Ramanathan
karthick Ramanathan

Reputation: 910

your embedding location model

const locationSchema = require('./location.js');

so only you getting this error, model can't be embedding schema only embedding

const locationSchema = require('./location.js'). schema;

so you try this

Upvotes: 1

Related Questions