关于javascript:猫鼬分页与排序

Mongoose pagination with sorting

我很难让Mongoose和NodeJ正常工作。在我的收藏夹中,我使用ID来创建分页,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 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()。我最好在创建画布的mhy顶层列表时使用类似的实现。

每个画布都有一张票,一个数字,我喜欢按降序排列。但是问题在于我无法再使用ids $ lte,因为这不是它们返回的顺序,因为ObjectId也有点像时间戳记。

是否有一种使用下一个变量(如上所示)作为下一个页面选择或任何其他实现的开始的方法,而没有使用skip或至少以良好的性能使用它?


嗯,稍微修改一下代码,您可以使用sort({ votes: -1, _id: -1})并使用votes作为主要标准,使用_id作为辅助标准进行分页。

除此之外,如果您正处于一个记录中,而skip()确实有很多伤害的阶段,则可以通过对投票范围进行分类来维护单独的缓存。这将在更新边界交叉处的缓存等方面带来一些额外的维护,但是一旦正确设置,它将可以非常流畅地工作。真正由您决定要如何前进。最好同时尝试一下,看看哪种最适合您。