Mongoose没有更新嵌入式文档

时间:2012-03-28 18:12:34

标签: node.js mongodb document mongoose

当我尝试更新mongodb中的嵌入式文档时,我遇到了一个问题。我已经尝试了两种方法,但都没有工作,而且我已经到处查找了为什么它没有更新的原因。无论如何,我的架构看起来像这样(我可能会注意到我正在尝试更新的嵌入式文档是混合类型)。

var UserModel = new mongoose.Schema({
    account: String,
    salt: String,
    password: String,
    highlight_words: String,
    networks: {},
    ip: String,
    ident: String,
    is_connected: Boolean,
    account_type: String
});

我尝试用这两段代码更新“网络”,但都无法正常工作。我准备把头发拉出来。

self.userModel.update({account: key}, {networks: self.client_data[key]['networks']}, function(err) {});

并且(注意我已经尝试添加一个回调到save(),并且它执行时没有错误)

self.userModel.findOne({account: key}, function(err, doc) {
    doc.networks = self.client_data[key]['networks'];
    doc.markModified('networks').save();
});

任何帮助将不胜感激!谢谢!

编辑:

问题是对象就是这样{'some.thing': {more: 'stuff'}}显然它不喜欢它。这是可以理解的!

2 个答案:

答案 0 :(得分:11)

试试doc.markModified('networks');。看起来networks是无模式类型。 Mongoose无法自动检测对无模式类型的更改。

答案 1 :(得分:2)

您需要完全定义架构才能实现此功能。例如:

networks {      类型:“字符串” }