2013-02-17 4 views
2

Salutation tous,Mongoose mise à jour document incorporé ne fonctionne pas

I défini un modèle de mangouste profondément ancrée « Personne », qui contient un champ « Contact » et « Contact » a un tableau de « Adresse » pour cette personne de travail, domicile, livraison etc adresses.

Lorsque je voulais mettre à jour une adresse et utiliser la fonction «save» du modèle, la modification n'était pas reflétée dans la base de données.

  console.log(person.Contact.Address[i].City = 'Chicago'); 
      person.save(function (err) { 
       if (!err) { 
        console.log(person.Contact.Address[i].City); 

Le console.log indique que la ville de terrain a été mis à jour à la nouvelle valeur, mais la valeur du mongodb reste le même.

Pourriez-vous s'il vous plaît m'aider avec ce problème?

Merci! Gary

Répondre

5

Le problème a été résolu en utilisant markModified:

person.markModified('Contact.Address'); 
person.save() 

Toujours pas sûr quand je dois utiliser markModified, parce que dans la plupart des autres cas, le changement a été reflété dans MongoDB sans l'utiliser.

+0

Je pense que cela a quelque chose à voir avec les types de données mixtes – franzlorenzon

+0

Tout champ dans votre schéma avec un 'type' de:' Mixed, {}, Array, [] 'nécessite l'utilisation de' markModified' quand son contenu est modifié. Vous ne devriez pas en avoir besoin autrement. – JohnnyHK

+0

Juste pour info., 'MarkModified' ne fonctionnerait qu'une seule fois par même requête. Si vous essayez de réutiliser pour la même demande, il peut lancer une erreur d'entrée en double. – BlueSword

Questions connexes