Не е добре документиран, но когато манипулирате полетата на масива, трябва да сте сигурни, че задействате откриването на промяна на полето на Mongoose, така че той да знае, че масивът е бил модифициран и трябва да бъде запазен.
Директното задаване на елемент от масив чрез неговия индекс в квадратни скоби не го маркира като модифициран, така че трябва ръчно да го маркирате с флаг чрез markModified
:
user.emails[0] = email1;
user.markModified('emails');
Или можете да го направите наведнъж, като използвате set
метод на масива Mongoose:
user.emails.set(0, email1);
Презаписването на цялото поле на масив също го задейства, поради което това работи за вас:
user.emails = [email1, email2];
както и:
user.emails = [email1];
user.emails[1] = email2;
Което означава, че това също работи:
user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;