【发布时间】:2017-06-24 17:30:59
【问题描述】:
我正在使用 mongoose 和 nodejs 创建一个预订系统。有一个酒店列表,其中包含可用房间数作为字段。在为客户创建新预订时,我想检查特定酒店的可用房间数量是否大于 0,如果是,则通过将其减少 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'}
}
这是我遇到问题的代码。
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)
});
}
});
当我尝试使用邮递员创建新预订时,它会创建新预订,但不会检查可用房间选项。如果一家酒店的可用房间为零,它仍会继续创建预订。此外,可用房间的数量根本不会低于 0。
【问题讨论】:
-
我猜你是在回调块中创建预订,假设它只会在更新发生时被调用。我猜即使没有更新,也会调用回调并创建您的预订对象。如果 writerresult 确实修改了任何文档,您可以尝试返回带有 err 的 writeresult 对象并创建预订。至于为什么你的酒店文件没有更新,我建议用查询调用 findOne 看看是否真的有匹配的文件。