[英]How do you update a referenced document in mongoose?
我正在使用貓鼬和nodejs創建各種各樣的預訂系統。 有一些酒店,其中列出了可提供客房數量的字段。 例如,在為客戶創建新預訂時,我想通過將其減少1來更新酒店的可用客房數量。
這是我的代碼:
酒店模型文件:
var hotel: new mongoose.Schema{
name: String,
availableRooms: {type: Number, default: 1}}
預訂模型文件:
var booking: new mongoose.Schema{
userName: String,
hotelId: {type: Schema.Types.ObjectId, ref: 'hotel'}
}
這是我遇到麻煩的后期操作:
api.route('/booking').post(function(req,res){
hotel.findOneAndUpdate({id: req.body.hotelId, availableRooms: {$gt: 0}},
availableRooms: -1, function(err){
if (err) throw err})
booking.create(req.body, function(err, confirmedBooking){
if (err) throw err;
res.json(confirmedBooking)
});
郵遞員顯示此錯誤:
ReferenceError:未定義酒店
您的代碼中存在多個錯誤:
postman
hotel is undefined
的錯誤hotel is undefined
的。 如果您已經導入,請檢查變量名,它們區分大小寫,因此也請進行檢查。
要在節點應用程序中導入酒店架構:
var Hotel = require('path/to/hotel.js');
//OR
var Hotel = mongoose.model('Hotel');
然后嘗試使用Hotel
而不是hotel
更新文檔。
decrease
field
的值,需要使用$inc
。 嘗試這個:
var hotelId = mongoose.Schema.Types.ObjectId(req.body.hotelId);
// Dont forget to include mongoose in your app.js
Hotel.findOneAndUpdate({
_id: hotelId, availableRooms: {$gt: 0}
},{
$inc : { availableRooms : -1 }
}, function(err){
if (err) throw err
else
{
booking.create(req.body, function(err, confirmedBooking){
if (err) throw err;
res.json(confirmedBooking)
});
}
});
更新 :我已將本節移至在update函數的回調中創建新預訂的地方,以便僅在成功更新后創建新預訂。 最好用這種方式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.