экспресс-нугурование на основе даты (созданный) - PullRequest
0 голосов
/ 20 января 2019

Может кто-нибудь предложить мне, как реализовать нумерацию страниц по дате? Например, пользователи будут загружать некоторые данные ежедневно, и они могут захотеть увидеть, сколько записей данных они передали в определенный день, разбивая на страницы. Они могут не выдавать точный объем данных каждый день, так каков самый масштабируемый способ реализовать это? Вот типичная нумерация страниц, которую я реализовал

router.get('/:page?', (req, res, next) => {  
  const perPage = 5;
  let page = req.params.page || 1;

  Upload.find({ user: req.user._id })
    .populate('user text')
    .skip((perPage * page) - perPage)
    .limit(perPage)
    .exec((err, uploads) => {
      Upload.count().exec((err, count) => {
        if (err)  return next(err)

        res.render('record', { 
          title: 'Records',
          data: uploads,
          current: page,
          pages: Math.ceil(count / perPage)
        });
      })
    })
});

1 Ответ

0 голосов
/ 20 января 2019

хорошо, так что в этом случае мы можем изначально идти только с запросом поиска. позже вы можете реализовать с aggregation.

так что идея в том, на каждой странице мы будем показывать данные каждого дня, не важно сколько их там. [конечно, не очень хорошая идея, когда у вас есть огромное количество данных за этот день или по вашему запросу]

вот что я реализовал для вас:


  router.get('/:page?', (req, res, next) => {  
        const page = req.params.page ? req.params.page : new Date().getDate();
        const currentYear = new Date().getFullYear();
        const currentMonth =new Date().getMonth();
        Upload.find({
            "createdAt": {
            "$gte": new Date(currentYear, currentMonth, page),
             "$lt": new Date(currentYear, currentMonth, page)}
            })
        .populate('user text')
          .exec((err, uploads) => {
              if (err)  return next(err)
                //uploads contains the result of date `page` of `currentMonth` month and year `currentYear`

              res.render('record', { 
                title: 'Records',
                data: uploads,
                resultDay:page
              });
            })
      });

несколько вещей, которые нужно запомнить, здесь мы не можем использовать limit & skip, поскольку мы пытаемся сделать запрос на один день.

так что в этом случае, если вы передадите параметр page как 1, он даст результат 1-го числа текущего месяца и текущего года.

здесь мы не знаем, сколько страниц будет там, потому что мы не знаем, на какой день, сколько документов есть заранее.

Итак, в ожидаемом интерфейсе вы покажете кнопку Next и назовите этот API. со значением +1 текущего значения страницы. и соответственно вы можете показать кнопку previous тоже.

чтобы подсчитать все документы одного дня, вы можете передать часть пояснения, которую мы уже используем внутри .find() в .count().

Надеюсь, это поможет,

дайте мне знать, если я что-то пропустил.

...