MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoose :attribuez un champ de type "tableau de chaînes"

Ce n'est pas bien documenté, mais lorsque vous manipulez des champs de tableau, vous devez vous assurer que vous déclenchez la détection de changement de champ de Mongoose afin qu'il sache que le tableau a été modifié et doit être enregistré.

La définition directe d'un élément de tableau via son index entre crochets ne le marque pas comme modifié, vous devez donc le marquer manuellement en utilisant markModified :

user.emails[0] = email1;
user.markModified('emails');

Ou vous pouvez le faire en une seule fois, en utilisant le set méthode du tableau Mongoose :

user.emails.set(0, email1);

L'écrasement de l'intégralité du champ du tableau le déclenche également, c'est pourquoi cela fonctionne pour vous :

user.emails = [email1, email2];

ainsi que :

user.emails = [email1];
user.emails[1] = email2;

Ce qui signifie que cela fonctionne également :

user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;