【问题标题】:Updating a subfield in a mongoDB document using findOne and save使用 findOne 更新 mongoDB 文档中的子字段并保存
【发布时间】:2013-10-10 12:40:20
【问题描述】:

我正在尝试更新 mongoDB 文档中的特定子字段,并决定首先找到有问题的对象,然后保存更新的对象。出于某种原因,保存选项似乎忽略了我的更改。

我的集合中有一个对象,它符合以下架构:

var tschema= mongoose.Schema({
a: Object
})

var t = db.model('tongoose',tschema);
t.findOne({},function(err,obj){
  console.log(obj.a); //yields ['banana',3]     
  obj.a[1]=1; //to make ['banana',1]
  console.log(obj); //yields ['banana',1]

  obj.save(function(err,real){
    console.log(real); //yields ['banana',1]
  });
});

但是当我回到 mongoDB 并查找保存的对象时,它从未显示任何更改。你能发现我做错了什么吗?

非常感谢。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    由于您的架构将a 定义为通用对象,因此该字段被Mongoose 视为Mixed 类型,您需要通过调用markModifiedsave 将其标记为已更改,否则save 将忽略更改。

    obj.markModified('a');
    obj.save(function(err,real){ ...
    

    请参阅文档的this page 上对Mixed 类型的讨论。

    【讨论】:

      猜你喜欢
      • 2016-02-15
      • 2017-05-28
      • 2016-07-30
      • 1970-01-01
      • 2013-01-06
      • 2021-01-28
      • 2022-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多