我正在使用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:未定义酒店
答案 0 :(得分:0)
您的代码中存在多个错误:
postman
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)
});
}
});
更新:我已将该部分移至更新功能回调中创建新预订,以便仅在成功更新后才会创建新预订。用这种方式最好