基于日期表达猫鼬分页(createdAt)

时间:2019-01-20 08:33:43

标签: node.js express mongoose ejs

有人可以建议我如何根据日期进行分页吗?例如,用户每天将推送一些数据,他们可能希望通过分页查看某天推送了多少数据记录。他们可能不会每天推送确切的数据量,那么实现此目的最可扩展的方法是什么?这是我实现的典型分页

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 :(得分:0)

好吧,因此在这种情况下,我们最初只能使用find查询。 稍后您可以使用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
              });
            })
      });

没有什么要记住的,在这里,我们在尝试查询一天时不能使用limitskip

因此在以上内容中,如果您将page参数传递为1,它将给出当月和当年第一天的结果。

在这里我们不知道会有多少页面,因为我们不知道哪一天有多少文档。

因此,它应该在前端显示Next按钮并调用此api。当前页面值的+1值。 因此,您也可以显示previous按钮。

要获取一天中所有文档的数量,您可以通过cindition部分,我们已经在.find()的{​​{1}}内部使用了该部分。

希望这会有所帮助,

让我知道我是否错过了任何事情。

相关问题