我正在使用字符串数组来保存电子邮件:
var user = new Schema({ // other fields... emails: [String] });
更新此字段时遇到麻烦.比方说,email1和email2是我从视图中收到的值:
这很好用:
user.emails = [email1,email2]; user.save(); // fields are updated,all good
而这不是:
user.emails[0] = email1; user.emails[1] = email2; user.save(function(err,savedUser) { console.log(savedUser.emails); // updated array [email1,email2] // but if I retrieve Now the user,the 'emails' field will not have above changes. });
但奇怪的是,这有效:
user.emails = [email1]; user.emails[1] = email2; user.save(); // user.emails == [email1,email2];
任何人都可以解释为什么会这样吗?
解决方法
它没有很好地记录,但是在操作数组字段时,您需要确保触发Mongoose的字段更改检测,以便它知道数组已被修改并需要保存.
通过方括号中的索引直接设置数组元素并不会将其标记为已修改,因此您必须使用markModified
手动标记它:
user.emails[0] = email1; user.markModified('emails');
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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。