通过范围查询与另一个排序字段进行mongodb分页

时间:2014-08-02 08:06:16

标签: javascript node.js mongodb mongoose mongodb-query

以下是我的架构的简化版本:

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)。现在我还想通过投票字段对数据进行排序。我该怎么做?

1 个答案:

答案 0 :(得分:2)

与寻找更高价值的概念完全相同,但这次是在"投票",但又有另一种扭曲:

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

所以,如果你想一想这里发生了什么,因为你正在做一个"降序"排序你想要的投票值是"小于或等于"从上一页看到的最后一个值。

第二部分是"列表"之前看到的_id值来自最后一页或可能更多。那部分取决于"粒度"你的"投票"值是为了保持在下一页中看不到已经分页的项目。

因此$nin运算符会在此处排除。您可能想要跟踪"投票"值会有所不同,以帮助您决定何时减少" seenIds"。

的列表

这是为分页进行范围查询的方法,但是如果你需要跳转到"具体的"数字页面不要忘记您仍然需要.limit().skip()。但这将适用于单页跳转,或者只是增量分页。

相关问题