Nó không được ghi chép đầy đủ, nhưng khi thao tác với các trường mảng, bạn cần đảm bảo rằng bạn đang kích hoạt tính năng phát hiện thay đổi trường của Mongoose để nó biết rằng mảng đã được sửa đổi và cần được lưu.
Đặt trực tiếp một phần tử mảng thông qua chỉ mục của nó trong dấu ngoặc vuông không đánh dấu phần tử đó đã được sửa đổi, vì vậy bạn phải gắn cờ thủ công bằng cách sử dụng markModified
:
user.emails[0] = email1;
user.markModified('emails');
Hoặc bạn có thể thực hiện một lần bằng cách sử dụng set
phương thức của mảng Mongoose:
user.emails.set(0, email1);
Việc ghi đè toàn bộ trường mảng cũng kích hoạt nó, đó là lý do tại sao điều này hiệu quả với bạn:
user.emails = [email1, email2];
cũng như:
user.emails = [email1];
user.emails[1] = email2;
Có nghĩa là điều này cũng hoạt động:
user.emails = [];
user.emails[0] = email1;
user.emails[1] = email2;