有人可以建议我如何根据日期进行分页吗?例如,用户每天将推送一些数据,他们可能希望通过分页查看某天推送了多少数据记录。他们可能不会每天推送确切的数据量,那么实现此目的最可扩展的方法是什么?这是我实现的典型分页
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)
});
})
})
});
答案 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
});
})
});
没有什么要记住的,在这里,我们在尝试查询一天时不能使用limit
和skip
。
因此在以上内容中,如果您将page
参数传递为1
,它将给出当月和当年第一天的结果。
在这里我们不知道会有多少页面,因为我们不知道哪一天有多少文档。
因此,它应该在前端显示Next
按钮并调用此api。当前页面值的+1
值。
因此,您也可以显示previous
按钮。
要获取一天中所有文档的数量,您可以通过cindition部分,我们已经在.find()
的{{1}}内部使用了该部分。
希望这会有所帮助,
让我知道我是否错过了任何事情。