gpt4 book ai didi

javascript - 带排序的 Mongoose 分页

转载 作者:行者123 更新时间:2023-11-30 16:44:11 24 4
gpt4 key购买 nike

我在使用 Mongoose 和 NodeJs 进行分页时遇到问题。在我的收藏中,我使用 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 .当我创建我的 Canvas 顶部列表时,我更喜欢使用类似的实现。

每个 Canvas 都有投票,一个数字,我喜欢按降序排序。但问题是,我不能再使用 ID $lte,因为这不是它们返回的顺序,因为 ObjectId 是 kind of like a timestamp还。

有没有办法使用 next 变量,如上所示,作为下一页选择或任何其他实现的开始,而不使用 skip 或至少使用它具有良好的性能?

最佳答案

嗯,作为对代码的一点调整,您可以使用 sort({ votes: -1, _id: -1}) 并使用 votes 作为主要分页和 _id 作为次要标准。

除此之外,如果您所处的阶段有太多记录,skip() 真的很麻烦,您可以通过分桶投票范围来维护一个单独的缓存。这将导致一些额外的维护更新边界交叉等的缓存,但一旦设置正确就会工作得非常顺利。真正由您决定如何前进。不妨尝试两者,看看哪种最适合您。

关于javascript - 带排序的 Mongoose 分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31500759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com