gpt4 book ai didi

node.js - 你如何更新 Mongoose 中的引用文档?

转载 作者:可可西里 更新时间:2023-11-01 10:50:12 25 4
gpt4 key购买 nike

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

postman 显示此错误:

ReferenceError: 酒店未定义

最佳答案

您的代码中存在多个错误:

  1. 您可能没有在您的 Node 应用程序 (app.js/server.js) 中导入酒店架构。来自 postman hotel is undefined 的错误正因为如此。

如果您已经导入,请检查变量名称,它们区分大小写,因此也请检查。

在您的 Node 应用程序中导入酒店架构:

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

然后尝试使用 Hotel 而不是 hotel 更新文档。

  1. 你不能像那样减少字段的值,你需要使用$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)
});
}
});

更新:我已将创建新预订的部分移到更新函数的回调中,以便只有在成功更新时才会创建新预订。用这种方式比较好

关于node.js - 你如何更新 Mongoose 中的引用文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41879048/

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