TourSchema = {name, otherFields}
UserSchema = {name, otherFields}
BookingSchema = {tour (id of tour), user (id of user), createdAt, otherFields}
在我的BookingSchema中,我有一个预中间件钩子:
bookingSchema.pre(/^find/, function(next) {
this.populate('user').populate({
path: 'tour',
select: 'name'
});
next();
});
由于这个钩子,在我的控制器中这不再起作用了:
const bookings = await Booking.find({ user: req.user.id }).populate('tour').sort({
createdAt: -1
});
当前,我可以通过以下代码来检索用户的预定行程:
const bookings = await Booking.find({ user: req.user.id }));
const tourIDs = bookings.map(el => el.tour._id);
const tours = await Tour.find({ _id: { $in: tourIDs } });
res.status(200).render('overview', {
title: 'My Tours',
tours
});
但是顺序不降序,我想根据重新预定的顺序检索旅行团。基于BookingSchema-> createdAt进行尊敬。
答案 0 :(得分:0)
在预订集合中使用.sort()方法,
const bookings = await Booking.find({ user: req.user.id }).sort({createdAt:-1});
答案 1 :(得分:0)
在游览人数众多之前,移动.sort()
模型上要应用的BookingSchema
模式。
await Booking.find({ user: req.user.id })
.sort({ createdAt: -1 })
.populate({
path: "tour",
select: "name -_id" //selecting only name of tour in population
})
.exec();