Není to dobře zdokumentováno, ale při manipulaci s poli pole se musíte ujistit, že spouštíte detekci změny pole Mongoose, aby věděl, že pole bylo upraveno a je třeba jej uložit.
Přímé nastavení prvku pole prostřednictvím jeho indexu v hranatých závorkách jej neoznačí jako změněné, takže jej musíte ručně označit pomocí markModified
:
user.emails[0] = email1;
user.markModified('emails');
Nebo to můžete udělat najednou pomocí set
metoda pole Mongoose:
user.emails.set(0, email1);
Přepsání celého pole pole jej také spustí, a proto vám to funguje:
user.emails = [email1, email2];
stejně jako:
user.emails = [email1];
user.emails[1] = email2;
Což znamená, že to také funguje:
user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;