使用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并查找保存的对象时,它从不显示任何更改。 你能发现我做错了吗?
非常感激。
由于您的模式将a
generics对象定义为该generics对象,因此该字段被Mongoose视为Mixed
types,您需要通过调用markModified
将其标记为已更改,否则save
将忽略更改。
obj.markModified('a'); obj.save(function(err,real){ ...
请参阅文档此页面上关于Mixed
types的讨论。