2017-01-27 18 views
1

mongooseとnodejsを使用してソートの予約システムを作成しています。フィールドとして利用可能な部屋の数を持っているホテルのリストがあります。顧客のために新しい予約を作成する際に、特定のホテルで利用可能な部屋の数が0より大きいかどうかを確認したい場合は、1を減らしてホテル内の利用可能な部屋の数を更新します。mongoose findOneAndUpdate関数が動作していないようです

ここに私のコードは

-Hotelモデルファイルである

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'} 
} 

モデルファイルを-Bookingここで私はとのトラブルを抱えているコードです。

郵便番号を使用して新しい予約を作成しようとすると、新しい予約が作成されますが、利用可能な部屋のオプションはチェックされません。ホテルに空き部屋がない場合は、引き続き予約を作成します。また、利用可能な部屋の数は0以下にはなりません。更新クエリから一致する文書がある場合、あなたのコードを通って行く

+0

更新が行われる場合にのみ実行されます。私は更新がない場合でも、コールバックが呼び出されているとあなたの予約オブジェクトが作成されていると思います。そのwriteresultが実際にドキュメントを変更した場合は、errを使用してwriteresultオブジェクトを返して予約を作成することができます。あなたのホテルのドキュメントが更新されない理由については、findOneを呼び出して、実際に一致するドキュメントがあるかどうかを確認することをお勧めします。 –

答えて

0

は、findOneAndUpdate()コールバックでelse句は常にあなたのコードは、エラーを生成しませんので、実行され、それだけでチェックされていません。

オリジナルのドキュメントに新しい予約を作成するための空き容量がある場合と同様に、一致するドキュメントがあるかどうかを確認する必要があります。

次のコードは、仕様を実装しています

私は0

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

と、それは、

である場合よりも特定のホテルで利用可能なお部屋の数が大きいかどうかを確認したいです

ホテルの客室数を1で減らして更新する

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

私はあなたはそれが呼び出されると仮定して、コールバックブロックで予約を作成していると思います

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); 
      }); 
     } 
    } 
); 
関連する問題