猫鼬的findOneAndUpdate函数似乎不起作用 [英] The mongoose findOneAndUpdate function doesn't seem to be working

查看:384
本文介绍了猫鼬的findOneAndUpdate函数似乎不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用猫鼬和nodejs创建各种各样的预订系统.有一些酒店,其中列出了可提供客房数量的字段.在为客户创建新的预订时,我要检查特定酒店中的可用客房数量是否大于0,如果是,请通过将其减少1来更新酒店中的可用客房数量.

I'm creating a reservation system of sorts using mongoose and nodejs. There are a list of hotels which have number of available rooms as a field. While creating a new booking for a customer, I want to check if the number of available rooms in the particular hotel greater than 0 and if it is, update the number of available rooms in the hotel by reducing it by 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'}
}

这是我遇到麻烦的代码.

Here's the code I'm having trouble with.

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.

When I try to create a new booking using postman, it creates the new booking but it doesn't check the available rooms option. If a hotel has zero available rooms, it still goes on to create the booking. Also, the number of available rooms doesn't go below 0 at all.

推荐答案

遍历代码,在

Going through your code, the else clause in the findOneAndUpdate() callback is always executed because your code doesn't produce any error, it just isn't checking if there is a matching document from the update query.

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

You need to check is there is a matching document as well as if the original document has available rooms for you to create the new booking.

以下代码实现了规范:

我要检查特定酒店的可用客房数量是否大于0

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

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

,如果是,则

减少1,以更新酒店的可用客房数量.

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);
            });
        }
    }
);

这篇关于猫鼬的findOneAndUpdate函数似乎不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆