4

我正在尝试更新 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 并查找保存的对象时,它永远不会显示任何更改。你能看出我做错了什么吗?

非常感激。

4

1 回答 1

8

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

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

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

于 2013-10-03T19:49:41.897 回答