【问题标题】:Mongoose not updating embedded document猫鼬不更新嵌入式文档
【发布时间】:2012-10-11 08:02:08
【问题描述】:

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

我已尝试使用这两个 sn-ps 代码更新“网络”,但均无效。我要拔头发了。

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'}} 一样,显然它不喜欢 .这是可以理解的!

【问题讨论】:

  • self.client_data[key]['networks'] 的值是多少?尝试用一些文字替换它以帮助您进行调试。
  • 这是一个相当大的对象,但我知道它已经被填充了。我尝试用doc.networks = {test: 123}; 替换它,但仍然没有保存文档..
  • 我猜也是在第一个版本中?任何机会它只是不匹配任何东西? delete({account: key}) 有效吗?

标签: node.js mongodb document mongoose


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您需要完全定义您的架构才能使其正常工作。例如:

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

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 2015-08-14
      • 2012-05-11
      • 2013-02-02
      • 2012-02-15
      • 2011-10-25
      • 2015-04-21
      • 2016-05-24
      • 2012-04-16
      相关资源
      最近更新 更多