Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用findOne和save更新mongoDB文档中的子字段_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 使用findOne和save更新mongoDB文档中的子字段

Javascript 使用findOne和save更新mongoDB文档中的子字段,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试更新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

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


非常感谢。

因为您的模式将
a
定义为泛型对象,所以Mongoose将该字段视为
混合类型,您需要通过调用将其标记为已更改,否则
保存
将忽略更改

obj.markModified('a');
obj.save(function(err,real){ ...
请参阅文档中关于
混合类型的讨论