十分に文書化されていませんが、配列フィールドを操作するときは、配列が変更されて保存する必要があることを認識できるように、Mongooseのフィールド変更検出をトリガーしていることを確認する必要があります。
角括弧内のインデックスを介して配列要素を直接設定しても、変更済みのマークは付けられないため、 markModified
:
user.emails[0] = email1;
user.markModified('emails');
または、 set
を使用して、一度に実行することもできます。
マングース配列の方法:
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;