Es ist nicht gut dokumentiert, aber wenn Sie Array-Felder manipulieren, müssen Sie sicherstellen, dass Sie Mongooses Feldänderungserkennung auslösen, damit es weiß, dass das Array geändert wurde und gespeichert werden muss.
Das direkte Setzen eines Array-Elements über seinen Index in eckige Klammern markiert es nicht als geändert, sodass Sie es manuell mit markModified
:
user.emails[0] = email1;
user.markModified('emails');
Oder Sie können es auf einmal tun, indem Sie das set
verwenden
Methode des Mongoose-Arrays:
user.emails.set(0, email1);
Das Überschreiben des gesamten Array-Felds löst es auch aus, weshalb dies für Sie funktioniert:
user.emails = [email1, email2];
sowie:
user.emails = [email1];
user.emails[1] = email2;
Das heißt, das funktioniert auch:
user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;