我正在使用Express和Mongoose实现REST API。我遇到了一项任务,要为具有大量文档的集合分页结果。 Document是一个社交媒体帖子,其中包含以下字段: created_at , updated_at 和得分。
使用限制和页码的普通分页实现不起作用,因为数据的性质。用户浏览结果时可以删除或添加帖子。
我可以按照MongoDB文档中的建议实现基于范围的分页。 页面 created_at 值中的最后一项可用于查询下一页。
Post.find({ created_at: { $gt: req.query.next } })
但是,如果我想通过得分对结果进行排序,这不是唯一的或所有得分都相同?
答案 0 :(得分:0)
有多种方法可以做到这一点,但在您的情况下,我建议动态创建查找/排序条件并在查找语句中使用它们。
离开我的脑袋只是为了给你一个想法:
var MyFilter = {};
var MySort = {};
if (req.query.created_at != undefined) {
MyFilter = { created_at : { $gte : req.query.created_at) } };
}
if (req.query.sortOn != undefined){
MySort = { req.query.sort : 1 };
}
Post.find(MyFilter)
.sort(MySort)
.exec(function (err, posts) {
===do your stuff===
});
答案 1 :(得分:0)
我刚刚在google群组中找到了相同的主题,并提供了完美的答案。