Mongoose分页与分类

时间:2015-07-19 11:34:49

标签: javascript node.js mongodb pagination

我很难让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性能?

1 个答案:

答案 0 :(得分:1)

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

除此之外,如果您处于这样一个阶段,当您拥有如此多的记录skip()真的受到伤害时,您可以通过分段投票维持单独的缓存。这将在更新边界十字架上的缓存等方面产生一些额外的维护,但是一旦正确设置就会非常顺利。你真的要决定如何前进。不妨尝试两者,看看什么最适合你。