2017-06-09 78 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