2017-06-09 42 views
0

鉴于汽车下面的模式/结构:猫鼬保存()findById()后不工作

car : { 
    _id: "123123", 
    name: "Ferrari", 
    owners: [ 
     { 
      _id : "098098", 
      active: true 
     }, 
     { 
      _id : "876876", 
      active: true 
     } 
    ] 
} 

我想用下面的代码,我改变所有owners.active假

能够保存更新的车对象,但它不保存到数据库中:

// find car by id 
db_car.findById(req.id).then(function(car){ 
    car.owners.forEach(function(owner){ 
    owner.active = false; 
    }); 
    car.save(); 
    console.log('updated car', car); // this is correct, shows updated data 
}); 

//现在检查数据库,数据不保存在数据库中!

我正在使用Node.js,MongoDB和Mongoose。

+0

'.save()'是一个 '异步' 方法。在操作实际完成之前,您正在调用控制台日志。 –

+0

@NeilLunn控制台日志与问题无关。问题是“为什么'save()'不起作用?” – trs

回答

0

Mongoose .findById()返回查询。猫鼬查询是而不是承诺。相反,您可以使用.exec()执行查询,然后返回一个承诺。例如:

db_car.findById(req.id).exec().then(function(car){ ... 

相关片文档:http://mongoosejs.com/docs/promises.html#queries-are-not-promises

+0

我用你的第一行替换了它,但它仍然不保存到数据库。 – trs