2012-03-28 125 views
6

当我尝试更新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) {}); 

和(请注意,我尝试添加一个回调保存(),它的执行没有错误)

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

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

编辑:

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

+0

什么是'self.client_data [键] [ '网络']'的值?尝试用一些文字替换它以帮助您进行调试。 – paulmelnikow 2012-03-28 19:19:02

+0

这是一个相当大的对象,但我知道这是一个事实,但它是人口稠密的。我尝试用'doc.networks = {test:123};'替换它,但仍然没有保存文档。 – rickibalboa 2012-03-28 19:36:37

+0

在第一个版本中,我猜测?任何机会只是不匹配任何东西? 'delete({account:key})'工作吗? – paulmelnikow 2012-03-28 19:57:09

回答

11

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

+0

你救了我的命 – Unitech 2013-11-30 16:56:38

+0

你是我的英雄! – 2014-06-30 00:47:09

+0

Awsome男人为我工作:) – 2015-07-02 17:10:18

2

您需要完全定义您的模式才能使其工作。例如:

网络{ 类型: “字符串” }