spingendo l’object nello schema di array in Mongoose

Ho questo schema di mangusta

var mongoose = require('mongoose'); var ContactSchema = module.exports = new mongoose.Schema({ name: { type: String, required: true }, phone: { type: Number, required: true, index: {unique: true} }, messages: [ { title: {type: String, required: true}, msg: {type: String, required: true} }] }, { collection: 'contacts', safe: true }); 

e cercando di aggiornare il modello in questo modo:

 Contact.findById(id, function(err, info) { if (err) return res.send("contact create error: " + err); // add the message to the contacts messages Contact.update({_id: info._id}, {$push: {"messages": {title: title, msg: msg}}}, function(err, numAffected, rawResponse) { if (err) return res.send("contact addMsg error: " + err); console.log('The number of updated documents was %d', numAffected); console.log('The raw response from Mongo was ', rawResponse); }); }); 

Non sto dichiarando che i messages prendono una serie di oggetti?
ERRORE: MongoError: imansible applicare il modificatore $ push / $ pushAll a non-array

Qualche idea?

mangusta fa questo per voi in un’unica operazione.

 Contact.findByIdAndUpdate( info._id, {$push: {"messages": {title: title, msg: msg}}}, {safe: true, upsert: true}, function(err, model) { console.log(err); } ); 

Tieni presente che, utilizzando questo metodo, non potrai utilizzare le funzioni “pre” dello schema.

http://mongoosejs.com/docs/middleware.html

A partire dall’ultimo mogoose findbyidandupdate deve essere aggiunto un param opzionale “new: true”. Altrimenti ti verrà restituito il vecchio documento. Quindi l’aggiornamento per Mongoose Versione 4.xx si converte in:

 Contact.findByIdAndUpdate( info._id, {$push: {"messages": {title: title, msg: msg}}}, {safe: true, upsert: true, new : true}, function(err, model) { console.log(err); } );