考虑以下架构
Var Schema = new Schema({
username: {Type: String},
...
...
contacts: {
email: {Type: String},
skype: {Type: String}
}
})
由于每个用户只能说一封电子邮件和Skype,我不想将数组与联系人一起使用。
放弃数据库查询和错误处理我尝试执行类似
的操作// var user is the user document found by id
var newValue = 'new@new.new';
user['username'] = newValue;
user['contacts.$.email'] = newValue;
console.log(user['username']); // logs new@new.new
console.log(user['contacts.$.email']); // logs new@new.new
user.save(...);
当联系人子文档仍为空时,不会发生错误并且用户名成功更新。 我在那里想念什么?
答案 0 :(得分:5)
从您的路径中删除$
索引,因为contacts
不是数组,并使用set
方法而不是尝试直接操作user
的属性路径:
var newValue = 'new@new.new';
user.set('contacts.email', newValue);
user.save(...);
或者您可以直接修改嵌入式email
字段:
var newValue = 'new@new.new';
user.contacts.email = newValue;
user.save(...);
如果问题不仅仅是拼写错误,那么您的另一个问题是您需要在架构定义中使用type
而不是Type
。所以它应该是:
var Schema = new Schema({
username: {type: String},
...
...
contacts: {
email: {type: String},
skype: {type: String}
}
});