gpt4 book ai didi

node.js - Mongoose findOneAndUpdate 函数似乎不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 02:11:28 25 4
gpt4 key购买 nike

我正在使用 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)
});
}
});

当我尝试使用 postman 创建新预订时,它会创建新预订,但不会检查可用房间选项。如果酒店有零个可用房间,它仍然会继续创建预订。而且,可用房间的数量根本不会低于 0。

最佳答案

检查您的代码, findOneAndUpdate() 中的 else 子句 回调始终会执行,因为您的代码不会产生任何错误,它只是不检查更新查询中是否存在匹配的文档。

您需要检查是否有匹配的文档,以及原始文档是否有可用房间供您创建新的预订。

以下代码实现了该规范:

I want to check if the number of available rooms in the particular hotel greater than 0

{ '_id': hotelId, 'availableRooms': { '$gt': 0 } },

如果是,

update the number of available rooms in the hotel by reducing it by 1.

{ '$inc': { 'availableRooms': -1 } }, 

create a new booking

if (hotel && hotel.availableRooms > 0) { /* create booking */ }

正确更新

Hotel.findOneAndUpdate(
{ '_id': hotelId, 'availableRooms': { '$gt': 0 } },
{ '$inc': { 'availableRooms': -1 } },
function (err, hotel) {
if (err) throw err;
else if (hotel && hotel.availableRooms > 0) {
booking.create(req.body, function(err, confirmedBooking){
if (err) throw err;
res.json(confirmedBooking);
});
}
}
);

关于node.js - Mongoose findOneAndUpdate 函数似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41895103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com