remove fields created collection mongodb mongoose

mongodb - fields - mongoose strict



empujando el objeto dentro del esquema de matriz en Mongoose (1)

Tengo este esquema de mangosta

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 intentando actualizar el modelo haciendo esto:

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); }); });

¿No estoy declarando los messages para tomar una variedad de objetos?
ERROR: MongoError: No se puede aplicar el modificador $ push / $ pushAll a no matriz

¿Algunas ideas?


la mangosta hace esto por ti en una sola operación.

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

Tenga en cuenta que al usar este método, no podrá hacer uso de las funciones "pre" del esquema.

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

A partir de la última mogoose findbyidandupdate, debe agregarse un parámetro "nuevo: verdadero". De lo contrario, le devolverán el documento antiguo. Por lo tanto, la actualización de Mongoose Version 4.xx se convierte en:

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