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

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

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

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并查找保存的对象时,它从不显示任何更改。 你能发现我做错了吗?

非常感激。

由于您的模式将agenerics对象定义为该generics对象,因此该字段被Mongoose视为Mixedtypes,您需要通过调用markModified将其标记为已更改,否则save将忽略更改。

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

请参阅文档此页面上关于Mixedtypes的讨论。