La mangouste / MongoDB - exemple Simple d'ajouter du texte à un document de l'objet de tableau, avec un schéma pré-établi

Pour le bien de la simplicité, en supposant que ce sont de ma collection de schémas:

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

De sorte que chaque document de la collection Messages peut avoir 4/5 envoyé des messages défini par le MessageDeliverySchema.

Ce que je veux faire est d'avoir un tableau de envoyé des messages, de sorte que chaque fois qu'un accusé de réception vient je viens de mettre à jour Messages et ajouter un autre message envoyé.

Ce que j'ai essayé:

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, et de pousser, ne pas ajouter un nouvel objet à envoyé des messages, au lieu de cela, il remplace un message existant.

Ce que je veux voir est un tableau de messages envoyés.e.g:

{
    'sent-messages': [
        {
            from: 'foo',
            to: 'bar',
            status: 'delivered'
        },
        {
            from: 'pippo',
            to: 'pippo',
            status: 'delivered'
        },
        {
            from: 'paul',
            to: 'smith',
            status: 'undelivered'
        }
    ]
}
$push est le droit de l'opérateur à l'utilisation et votre code a bien fonctionné quand je l'ai essayé. Chaque fois que j'ai couru un nouveau sent-messages élément de tableau a été ajouté.
Ah, OK, donc ce n'était pas écraser le message actuel. J'obtiens l'erreur: "Impossible d'appliquer des $push/$pushAll modificateur de non-array).
Ce qui signifie que le sent-messages de la propriété, dans ce document, qui est déjà dans la base de données n'est pas un tableau donc il ne peut pas être poussé à l'. Peut-être que vous avez ajouté que le doc par d'autres moyens afin de ne pas correspondre à votre Mangouste schéma.
Oui je l'ai ajouté, sans le $pousser, je vais répondre à ma question ci-dessous. Merci pour votre aide.

OriginalL'auteur StuR | 2012-09-27