Nie jest to dobrze udokumentowane, ale kiedy manipulujesz polami tablicy, musisz upewnić się, że uruchamiasz wykrywanie zmian pól Mongoose, aby wiedział, że tablica została zmodyfikowana i musi zostać zapisana.
Bezpośrednie ustawienie elementu tablicy za pomocą jego indeksu w nawiasach kwadratowych nie oznacza jego modyfikacji, więc musisz ręcznie oznaczyć go za pomocą markModified
:
user.emails[0] = email1;
user.markModified('emails');
Możesz też zrobić to za jednym razem, używając set
metoda tablicy Mongoose:
user.emails.set(0, email1);
Zastąpienie całego pola tablicy również go wyzwala, dlatego to działa dla Ciebie:
user.emails = [email1, email2];
a także:
user.emails = [email1];
user.emails[1] = email2;
Co oznacza, że to również działa:
user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;