2016-07-05 31 views
1

在我的nodejs网络应用上使用sequelize,我想查询使用分页(按日期)的帖子。他们提供offsetlimitSequelize分页

由于我想显示帖子从新到旧,我需要考虑它们的创建日期。例如,如果我将第一个查询限制为10页,并且在执行第二个查询之前创建了一个新帖子,则偏移量为10的下一个查询将导致来自最后一个查询的重复帖子。

我应该如何实现分页,以便它支持新条目?

回答

6

如果你想有一个稳定的分页,不要分页行偏移,因为它是不稳定的,因为你提到的原因。

您应该瞄准对随时间稳定的值进行分页,并使用where子句来过滤结果。最好的情况是如果你有一个自动递增的id,但是发布日期也是合理的。

喜欢的东西:

Post.findAll({ 
where: { createdDate: { $lt: previousDate }, 
limit: 10 
}) 

你需要跟踪previousDate的这个OFC。这种方法也有一些注意事项,您可能需要将其与客户端重复数据删除结合起来。

这里是一个博客贴子,可能有你需要的所有答案: Pagination: You're (Probably) Doing It Wrong

3

要做到这一点,最简单的方法是使用Sequelize的findAndCountAll

Post.findAndCountAll({ 
    where: {...}, 
    order: [...], 
    limit: 5, 
    offset: 0, 
}).then(function (result) { 
    res.render(...); 
}); 

这里,结果有两种结果您的查询并计为result.rowresult.count。然后,您可以增加偏移量并将其用于分页。

Sequelize documentation for findAndCountAll