Per i amor di semplicità, assumendo questi sono i miei schemi di raccolta:Mongoose/MongoDB - Semplice esempio di aggiungendo a un array oggetto documento, con un pre-definito schema
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]
}));
Così ogni documento nella collezione I messaggi possono avere 4/5 messaggi inviati definiti da MessageDeliverySchema.
Quello che voglio fare è di avere una serie di inviati-messaggi, così ogni volta una ricevuta di consegna è disponibile in Ho appena aggiorno Messaggi e aggiungere un altro messaggio inviato.
Quello che ho provato:
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, e $ spinta, non aggiunge un nuovo oggetto per inviati-messaggi, invece sovrascrive un messaggio esistente.
Quello che voglio vedere è una serie di messaggi inviati per esempio:
{
'sent-messages': [
{
from: 'foo',
to: 'bar',
status: 'delivered'
},
{
from: 'pippo',
to: 'pippo',
status: 'delivered'
},
{
from: 'paul',
to: 'smith',
status: 'undelivered'
}
]
}
'$ push' è l'operatore diritto di utilizzare e il codice ha funzionato bene quando l'ho provato . Ogni volta che l'ho eseguito, è stato aggiunto un nuovo elemento di matrice 'inviati-messaggi'. – JohnnyHK
@JohnnyHK Ah, OK, quindi non stava sovrascrivendo il messaggio esistente. Sto ottenendo l'errore: 'Non posso applicare $ push/$ pushAll modificatore a non-array'. – StuR
Significa che la proprietà 'inviati-messaggi' in quel documento che è già nel database non è una matrice, quindi non può essere inviata a. Forse hai aggiunto quel documento con altri mezzi in modo che non corrisponda al tuo schema Mongoose. – JohnnyHK