我很难让Mongoose和NodeJ的分页工作。在我的收藏中,我使用id来创建这样的分页:
var limit = req.params.limit ? req.params.limit : 1;
limit ++;
if(req.params.start){
var start = mongoose.Types.ObjectId(req.params.start);
Canvas.find().where({_id : {$lte : start}}).sort({"_id": -1}).limit(limit).exec(function(err, items){
if(items.length > limit -1){
var last = items.pop();
items.push({next : last._id});
}
});
}else{
Canvas.find().sort({"_id": -1}).limit(limit).exec(function(err, items){
if(items.length > limit -1){
var last = items.pop();
items.push({next : last._id});
}
});
}
这种方法在这种情况下非常好用。我不想使用skip()because of performance。当我创建画布的mhy顶级列表时,我最好喜欢使用类似的实现。
每张画布都有投票,一个数字,我喜欢按降序排序。但问题是,我不再使用ID $ lte,因为它们不是他们返回的顺序,因为ObjectId也是kind of like a timestamp。
有没有办法使用下一个变量,如上所示,作为下一页选择的开始或任何其他实现,而不使用跳过或至少使用它与ok性能?
答案 0 :(得分:1)
嗯,作为对代码的一点调整,您可以使用sort({ votes: -1, _id: -1})
并使用votes
作为主要参与者进行分页,将_id
作为次要标准。
除此之外,如果您处于这样一个阶段,当您拥有如此多的记录skip()
真的受到伤害时,您可以通过分段投票维持单独的缓存。这将在更新边界十字架上的缓存等方面产生一些额外的维护,但是一旦正确设置就会非常顺利。你真的要决定如何前进。不妨尝试两者,看看什么最适合你。