用另一个sorting字段进行范围查询的mongodb分页

这里是我的模式的简化版本:

var MySchema = new Schema({ createdDate: { type: Date, required: true, default: Date.now, index: true }, vote: { type: Number, index: true, default: 0 } }); 

我有大量的数据,所以对于具有良好性能的分页,我使用范围查询如: .find({_id: {$gt: lastId}}).limit(20) 。 现在我也想通过投票字段来sorting我的数据。 我应该怎么做?

与寻找更大价值的概念相当相似,但是这次是在“投票”上,而是另一个转折:

 var query = Model.find({ "vote": { "$lte": lastVoteValue }, "_id": { "$nin": seenIds } }).sort({ "vote": -1 }).limit(20); 

所以如果你考虑一下这里发生的事情,既然你正在做一个“降序”sorting,你希望投票的价值“小于或等于”你上一页的最后一个价值。

第二部分将是从最后一页或可能更多的以前看到的_id值的“列表”。 这部分取决于“精确”的“投票”价值是为了保持没有任何已经分页的项目在下一页中看到。

所以$nin操作符在这里排除。 您可能想要跟踪“投票”价值如何变化,以帮助您决定何时减less“seenIds”的列表。

这是做分页的范围查询的方法,但是如果你需要跳转到“特定”页面的数量,不要忘记,你仍然需要.limit().skip() 。 但是,这将适用于单页跳转,否则只是增量分页。