我正在尝试更新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并查找保存的对象时,它从未显示任何更改。你能发现我做错了吗?
非常感谢。
答案 0 :(得分:7)
由于您的架构将a
定义为通用对象,因此Mongoose会将该字段视为Mixed
类型,您需要通过调用markModified
或{{1将其标记为已更改将忽略变化。
save
请参阅有关this page文档的obj.markModified('a');
obj.save(function(err,real){ ...
类型的讨论。