Para los sake de simplicidad, suponiendo que estos son mis esquemas de recolección:Mangosta/MongoDB - Ejemplo simple de añadir a una matriz de objetos de documento, con un esquema predefinido
var MessageDeliverySchema = new Schema({
from : { type : String },
to : { type : String },
status : { type : String }
});
var Messages = mongoose.model('messages',
new Schema({
id : ObjectId,
user : { type:String },
'sent-messages' : [MessageDeliverySchema]
}));
Así que cada documento en la colección Los mensajes pueden tener 4/5 mensajes enviados definidos por MessageDeliverySchema.
Lo que quiero hacer es tener una serie de enviados-mensajes, por lo que cada vez que un recibo de entrega viene en acabo de actualizar mensajes y añadir otro mensaje enviado.
Lo que he intentado:
var delivered = {
from: 'foo',
to: 'bar',
status: 'delivered'
};
Message.update({_id: '5064aae4154cb34d14000001' },
{$pushAll: { 'sent-messages' : delivered }} , {upsert:true}, function(err, data) {
});
Message.update({_id: '5064aae4154cb34d14000001' },
{$push: { 'sent-messages' : delivered }},{upsert:true}, function(err, data) {
});
$ pushAll y $ empuje, no añade un nuevo objeto a enviados-mensajes, sino que sobrescribe un mensaje existente.
Lo que quiero ver es una serie de mensajes que se envían por ejemplo:
{
'sent-messages': [
{
from: 'foo',
to: 'bar',
status: 'delivered'
},
{
from: 'pippo',
to: 'pippo',
status: 'delivered'
},
{
from: 'paul',
to: 'smith',
status: 'undelivered'
}
]
}
'$ push' es el operador derecho a usar y su código funcionó bien cuando lo probé . Cada vez que lo ejecuté, se agregó un nuevo elemento de matriz 'send-messages'. – JohnnyHK
@JohnnyHK Ah, está bien, así que no sobrescribió el mensaje existente. Me aparece el error: 'No se puede aplicar $ push/$ pushAll modifier a non-array'. – StuR
Lo que significa que la propiedad 'sent-messages' en ese documento que ya está en la base de datos no es una matriz por lo que no se puede insertar. Tal vez hayas agregado ese documento a través de otros medios, por lo que no coincide con tu esquema de Mongoose. – JohnnyHK