Det er ikke veldokumenteret, men når du manipulerer array-felter, skal du sørge for, at du udløser Mongooses feltændringsdetektion, så den ved, at arrayet er blevet ændret og skal gemmes.
Direkte indstilling af et array-element via dets indeks i firkantede parenteser markerer det ikke som ændret, så du skal manuelt markere det ved hjælp af markModified
:
user.emails[0] = email1;
user.markModified('emails');
Eller du kan gøre det på én gang ved at bruge set
metode for Mongoose-arrayet:
user.emails.set(0, email1);
Overskrivning af hele arrayfeltet udløser det også, hvorfor dette virker for dig:
user.emails = [email1, email2];
samt:
user.emails = [email1];
user.emails[1] = email2;
Hvilket betyder, at dette også virker:
user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;