所有其他解决方案都使用skip(),这显然对速度不利。此外,我已经看到人们使用nin,如果你有一堆你正在检查的ID,它似乎可能是一个糟糕的解决方案。这是我到目前为止所拥有的
//Get the top 20 posts initially
exports.getPosts = (req, res) => {
db.post.find().sort({
numberOfLikes: -1
}).limit(20).exec(function(err, posts){
if(err){
return res.status(500).send();
}
res.json(posts);
});
};
//This is to enable pagination on posts
exports.getMorePosts = (req, res) => {
var query = req.query;
if(!query.hasOwnProperty('numberOfLikes') || !query.hasOwnProperty('postId')){
return res.status(400).send();
}
db.post.find({
numberOfLikes: {
$lte: query.numberOfLikes
},
_id: {
$ne: query.postId
}
}).sort('-numberOfLikes').limit(20).exec(function(err, posts){
if(err){
return res.status(500).send();
}
res.json(posts);
});
};
所以我使用第一个函数获取前20个帖子,然后第二个函数获得20个帖子,依此类推。第二个函数从最初的20个和最后一个帖子的postId中传递了最少数量的喜欢。从那里再获得20个。
我想按照喜欢的数量对它们进行排序,但问题是一旦它获得0个喜欢的帖子,它永远不知道何时结束,它只是继续骑自行车和第四个。