【发布时间】:2023-02-13 22:57:23
【问题描述】:
我在节点中定义了这个猫鼬模式
`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 });`
旅游参数是一个 id 数组
但我得到这个错误 “预订验证失败:tour.0:投射到 [ObjectId] 失败,因为值“[”5c88fa8cf4afda39709c295a,5c88fa8cf4afda39709c2951”]”(类型字符串)位于路径“tour.0” 如果游览属性不是一组对象,我可以只用一次游览来完成。我的主要问题是预订可能与我数据库中的许多旅游对象相关 *经过一些修改后编辑错误变为 “位置 0 的 JSON 中的意外标记 u”
我的前端代码(角度)是这样的。我正在向我的后端(节点)发出获取请求
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',
});
});
【问题讨论】:
标签: arrays object mongoose insert create-function