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
Vous devez vous connecter pour publier un commentaire.
L'erreur que je recevais était: "Ne peut s'appliquer $push/$pushAll modificateur de non-array'.
J'ai ajouté un objet dans le document comme ceci:
Et a ensuite essayé de faire un $pousser, ce qui m'a donné l'erreur ci-dessus.
J'ai donc enlevé le document et l'utilisation de pousser qui a eu l'effet désiré.
Pour la référence c'est la bonne façon d'ajouter à un document existant, et la réponse à ma question:
OriginalL'auteur StuR