我有Mongoose模型实例:
var s = new Song({
song_id: '123',
title: 'sample song',
artist: {
name: 'sample artist',
id: '456'
}
});
现在我想设置/更新其属性,但使用extend
(例如来自nodejs util._extend)
s = extend(s, {
title: 'changed title',
artist: {
name: 'changed artist',
id: '789'
}
});
s.save();
虽然title
(作为顶级属性)设置正常,但artist
中的更改不可见。
我知道我可以通过以下方式设置:
s.artist.name = 'changed artist';
但是我有什么遗漏或者这种更新属性不可用的方法吗?
修改
Gah ......看起来有人用错误的方式定义了架构。而不是将artist
字段定义为
artist: {
name: String,
id: String
}
它被定义为
artist.name: String,
artist.id: String
当我重新定义它时,它现在有效。感谢
答案 0 :(得分:0)
你可以做的是使用Mongoose的更新方法:
Song.update({
song_id: '123',
}, {
$set: {
title: 'changed title',
artist: {
name: 'changed artist',
id: '789',
},
},
}, function(err, numAffected) {
...
});
但是,我实际上并不明白你的扩展尝试失败的原因。它似乎对我有用,我通常使用下划线的_.extend函数。