【问题标题】:Cursor based pagination in MongoDB with sorting on 2 propertiesMongoDB中基于光标的分页,对2个属性进行排序
【发布时间】:2020-02-17 22:22:57
【问题描述】:

我的最终目标是在 MongoDB 中实现基于光标的分页,同时对 2 个属性进行排序。

假设我们有以下集合:

+--------------------------------------+------+-------+
|                 _id                  | cost |  vip  |
+--------------------------------------+------+-------+
| ObjectId("5dae005e665fc34b03c70f8a") |  700 | true  | <-- first query
| ObjectId("5dae005e665fc34b03c70f8c") |   50 | true  | <-- first query
| ObjectId("5dae005e665fc34b03c70f88") |    1 | true  | <-- second query
| ObjectId("5dae005e665fc34b03c70f8b") | 1200 | false | <-- second query
| ObjectId("5dae005e665fc34b03c70f87") |  400 | false |
| ObjectId("5dae005e665fc34b03c70f89") |  300 | false |
+--------------------------------------+------+-------+

我们希望对结果进行排序:{vip: -1, cost: -1},限制为 2。第一个查询将返回第 1 行和第 2 行,结束光标为 (ObjectId("5dae005e665fc34b03c70f8c"))。

有了这些信息,我如何获取接下来的 2 行(即第 3 + 4 行)?

我已尝试使用以下过滤器,但无济于事。

{_id: {$lt: ObjectId('5dae005e665fc34b03c70f8c')}, cost: {$gt: 1}}

感谢您的帮助。

【问题讨论】:

  • 我们最终通过在游标中包含成本和vip解决了这个问题,这样我们就可以在后续请求上构造查询。

标签: mongodb


【解决方案1】:

你可以使用skip方法

db.getCollection('collection').find({}).sort({vip: -1, cost: -1}).skip(2).limit(2)

【讨论】:

    猜你喜欢
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多