使用" extend"设置Mongoose模型实例属性。 UTIL

时间:2014-09-10 10:32:11

标签: javascript node.js mongoose

我有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

当我重新定义它时,它现在有效。感谢

1 个答案:

答案 0 :(得分:0)

你可以做的是使用Mongoose的更新方法:

Song.update({
    song_id: '123',
}, {
    $set: {
        title: 'changed title',
        artist: {
            name: 'changed artist',
            id: '789',
        },
    },
}, function(err, numAffected) {
    ...
});

但是,我实际上并不明白你的扩展尝试失败的原因。它似乎对我有用,我通常使用下划线的_.extend函数。