如何获得用户以相反的预订顺序预订的旅行团?

时间:2019-12-31 01:05:44

标签: mongodb mongoose

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进行尊敬。

2 个答案:

答案 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();