簡體   English   中英

如何更新貓鼬中的參考文件?

[英]How do you update a referenced document in 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:未定義酒店

您的代碼中存在多個錯誤:

  1. 您可能沒有在節點應用程序(app.js / server.js)中導入酒店架構。 因此,來自postman hotel is undefined的錯誤hotel is undefined的。

如果您已經導入,請檢查變量名,它們區分大小寫,因此也請進行檢查。

要在節點應用程序中導入酒店架構:

var Hotel = require('path/to/hotel.js');
//OR
var Hotel = mongoose.model('Hotel');

然后嘗試使用Hotel而不是hotel更新文檔。

  1. 您不能像這樣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)
        });
    }
});

更新 :我已將本節移至在update函數的回調中創建新預訂的地方,以便僅在成功更新后創建新預訂。 最好用這種方式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM