我已经在节点中定义了这个mongoose模式
`const bookingSchema = new mongoose.Schema({
tour: [
{
type: mongoose.Schema.ObjectId,
ref: 'Tour',
required: [true, 'Booking must belong to Tours!'],
},
],
user: {
type: mongoose.Schema.ObjectId,
ref: 'User',
required: [true, 'Booking must belong to User!'],
},
price: {
type: Number,
required: [true, 'Booking must have a price'],
},
createdAt: {
type: Date,
default: Date.now(),
},
paid: {
type: Boolean,
default: true,
},
});
bookingSchema.pre(/^find/, function (next) {
this.populate('user').populate({
path: 'tour',
select: 'name',
});`your text`
});
Then when i try to create a booking i use the create function
await Booking.create({ tour, user, price });`
tour参数是一个id数组
但我得到这个错误“预订验证失败:行程0:对于值“[“5c88fa8cf4afda39709c295a,强制转换为[对象ID]失败,5c88fa8cf4afda39709c2951”]”(类型字符串)在路径“tour.0”如果tour属性不是一个对象数组,我可以只对一个tour执行此操作。我的主要问题是,一个预订可能与我的数据库中的许多tour对象相关 * 在进行一些修改后编辑,错误变为“JSON中位置0处的意外标记u”
我的前端代码(角)是这样的。我正在向我的后端(节点)发出一个get请求
createBookingCheckout(params: any): Observable<any> {
console.log('serv');
return this.http.get<any>(`${CREATE_BOOKING_CHECKOUT}`, {
params,
withCredentials: true,
});
}
所以我把id作为查询参数传递
这是我尝试创建预订的后端
exports.createBookingCheckout = catchAsync(async (req, res, next) => {
const { order, tour: strTour } = req.query;
const user = req.user._id;
const parsedOrder = JSON.parse(order);
const tour = JSON.parse(strTour);
console.log(tour);
// const tours = await tour.forEach((id) => {
// Tour.find({ id });
// });
// console.log(tours);
let price = 0;
parsedOrder.forEach(
(obj) => (price = price + obj.price_data.unit_amount * obj.quantity)
);
if (!parsedOrder && !user) return next();
await Booking.create({ tour, user, price });
res.redirect(req.originalUrl.split('?')[0]);
res.status(200).json({
status: 'success',
});
});
1条答案
按热度按时间yvfmudvl1#
我认为这个问题的快速解决方案是,每当您要添加多个旅游时,您应该创建一个数组,将所有图尔斯ID推送到数组中,然后将tourArray添加到您要创建的新预订中,当您要更新现有预订时,您应该重复此过程。
当您要创建新的预订文档时。
情况一:参加一次旅游
情况二:参加多个巡回赛
更新预订
假设您要向现有预订添加新的旅行,
=〉mongoose中的运算符
$push
是您需要推送到您现有预订中已有的现有数组或游览中的运算符new_tour
来自您的req.body
当然,在某些情况下,您将从
Booking
中删除Tour
ID,=〉在这种情况下,您将使用运算符
$pull