以下是我的架构的简化版本:
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)
。现在我还想通过投票字段对数据进行排序。我该怎么做?
答案 0 :(得分:2)
与寻找更高价值的概念完全相同,但这次是在"投票",但又有另一种扭曲:
var query = Model.find({
"vote": { "$lte": lastVoteValue },
"_id": { "$nin": seenIds }
}).sort({ "vote": -1 }).limit(20);
所以,如果你想一想这里发生了什么,因为你正在做一个"降序"排序你想要的投票值是"小于或等于"从上一页看到的最后一个值。
第二部分是"列表"之前看到的_id
值来自最后一页或可能更多。那部分取决于"粒度"你的"投票"值是为了保持在下一页中看不到已经分页的项目。
因此$nin
运算符会在此处排除。您可能想要跟踪"投票"值会有所不同,以帮助您决定何时减少" seenIds"。
这是为分页进行范围查询的方法,但是如果你需要跳转到"具体的"数字页面不要忘记您仍然需要.limit()
和.skip()
。但这将适用于单页跳转,或者只是增量分页。