I have tried multiple ways to do this, all resulting in an error. I have checked, and double checked Mongoose documentation and examples so I must be doing something wrong. I want to be able to insert 1-to-many contacts (Contact.js) into an array of contacts ([Contact]) for a given venue (Venue.js).
It seems like I should be able to do this:
// contact model
var mongoose = require('mongoose')
,Schema = mongoose.Schema
,ObjectId = Schema.ObjectId;
var contactSchema = new Schema({
firstName : { type: String, required: true, trim: true },
lastName : { type: String, required: true, trim: true },
email : { type: String, required: true, trim: true },
created : {type: Date, default: Date.now}
});
module.exports = mongoose.model('Contact', contactSchema);
// venue model
var Contact = require('./contact.js');
var mongoose = require('mongoose')
,Schema = mongoose.Schema;
var venueSchema = new Schema({
_id : { type: String, required: true, trim: true },
name : { type: String, required: true, trim: true },
description : { type: String, required: true, trim: true },
market : { type: String, required: true, trim:true }, // key to Market.js
state : { type: String, required: true, trim:true }, // key to State.js
isActive : { type: Boolean, required: false, default: false },
siteUrl : { type: String, required: false, trim: true },
contacts : [{ type: Contact, required: true, trim:true }], // array of Contact.js
privateNotes : { type: String, required: false, trim: true },
comments : { type: String, required: false, trim: true },
coverImage : { type: String, required: true, trim: true },
images : { type: String, required: false, trim: true }
});
module.exports = mongoose.model('Venue', venueSchema);
// venues.js
exports.addVenue = function(req, res) {
var v = req.params;
venueExists(v, function(exists) {
if (exists) {
return res.send(new restify.ConflictError("Venue already exists"));
} else {
var venue = new Venue({
_id
: string(
v.name).slugify().s, // need to replace space with _ and make lowercase
description : v.description,
isActive : v.isActive,
siteUrl : v.siteUrl,
market : v.market, // key to Market.js
state : v.state, // key to State.js
contacts : v.contacts // array of objects (Contact.js)
privateNotes : v.privateNotes,
comments : v.comments,
coverImage : v.coverImage,
images : v.images
});
venue.save(function (err) {
if (!err) {
return res.send(201, venue);
} else {
return res.send(err);
}
});
}
});
}
It returns a casting error:
"message": "Cast to undefined_method failed for value \"[object Object],[object Object]\" at path \"contacts\""
any thoughts?