使用findOne更新mongoDB文档中的子字段并保存

Ada*_*dam 4 javascript mongoose mongodb node.js

我正在尝试更新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]
  });
});
Run Code Online (Sandbox Code Playgroud)

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

非常感激.

Joh*_*yHK 7

因为您的模式定义a为通用对象,所以MixedMongoose 将该字段视为类型,您需要通过调用将其标记为已更改,markModified否则save将忽略该更改.

obj.markModified('a');
obj.save(function(err,real){ ...
Run Code Online (Sandbox Code Playgroud)

请参阅文档此页面上的Mixed类型讨论.