这是我的架构的简化版本:
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)
。现在我还想按投票字段对我的数据进行排序。我应该怎么做?
最佳答案
与寻找更大值(value)的概念几乎相同,但这次是在“投票”上,但有另一个转折:
var query = Model.find({
"vote": { "$lte": lastVoteValue },
"_id": { "$nin": seenIds }
}).sort({ "vote": -1 }).limit(20);
因此,如果您考虑一下这里发生的事情,因为您正在进行“降序”排序,您希望投票值“小于或等于”从上一页看到的最后一个值。
第二部分将是以前看到的 _id
值的“列表”,这些值可能来自最后一页,也可能更多。这部分取决于您的“投票”值的“粒度”程度,以确保在下一页中不会看到任何已分页的项目。
所以 $nin
运算符在这里进行排除。您可能想要跟踪“投票”值如何变化,以帮助您决定何时减少“seenIds”列表。
这就是进行分页范围查询的方法,但是如果你需要按数字跳转到“特定”页面,请不要忘记你仍然需要 .limit()
和 .skip()
。但这将适用于单页跳转,或者只是增量分页。
关于javascript - mongodb按范围查询分页与另一个排序字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25093012/