MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Mongoose:assegna campo di tipo 'array di stringhe'

Non è ben documentato, ma quando si manipolano i campi dell'array è necessario assicurarsi di attivare il rilevamento delle modifiche al campo di Mongoose in modo che sappia che l'array è stato modificato e deve essere salvato.

L'impostazione diretta di un elemento dell'array tramite il suo indice tra parentesi quadre non lo contrassegna come modificato, quindi è necessario contrassegnarlo manualmente utilizzando markModified :

user.emails[0] = email1;
user.markModified('emails');

Oppure puoi farlo in una volta sola, utilizzando il set metodo dell'array Mongoose:

user.emails.set(0, email1);

Anche la sovrascrittura dell'intero campo dell'array lo attiva ed è per questo che funziona per te:

user.emails = [email1, email2];

così come:

user.emails = [email1];
user.emails[1] = email2;

Ciò significa che funziona anche questo:

user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;