Det är inte väldokumenterat, men när du manipulerar arrayfält måste du se till att du utlöser Mongooses fältändringsdetektering så att den vet att arrayen har modifierats och måste sparas.
Att direkt ställa in ett arrayelement via dess index inom hakparenteser markerar det inte som modifierat så du måste flagga det manuellt med markModified
:
user.emails[0] = email1;
user.markModified('emails');
Eller så kan du göra det på en gång med set
metod för Mongoose-arrayen:
user.emails.set(0, email1);
Att skriva över hela arrayfältet utlöser det också, varför detta fungerar för dig:
user.emails = [email1, email2];
samt:
user.emails = [email1];
user.emails[1] = email2;
Vilket betyder att detta också fungerar:
user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;