mongoose分页sorting

我有麻烦让我的分页与Mongoose和NodeJs工作。 在我的collections中,我使用ID来创build分页,如下所示:

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()。 当我创buildcanvas的顶级列表时,我最好喜欢使用类似的实现。

每张canvas都有一个数字,我喜欢按照降序排列。 但问题是,那么我不再可以使用ids $ lte,因为这不是它们返回的顺序,因为ObjectId也像时间戳那样 。

有没有办法使用下一个variables,如上所示,作为下一个页面select或任何其他实现的开始,而不使用跳过或至less使用良好的性能?

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

除此之外,如果你处于一个有skip()logging太多的阶段,那么你可以通过一系列的选票来维护一个单独的caching。 这将导致一些额外的维护更新边界十字架上的caching等,但一旦正确设置将工作相当顺利。 决定你想如何前进真的取决于你。 不妨尝试两种方法,看看最适合你的是什么。