【问题标题】:Mongodb is it possible to specify "skip" as the range of index?Mongodb是否可以将“跳过”指定为索引范围?
【发布时间】:2018-12-28 04:38:03
【问题描述】:

在 Mongodb 中进行分页是否可以将 skip 指定为索引范围,即假设我在第 6 页,并且我想从 (1-59) 跳过文档并在 (0 & 60-70) 返回文档是否可以在单个查询中。

【问题讨论】:

    标签: mongodb pagination


    【解决方案1】:

    可以使用聚合框架获取指定多个范围的数据。每个分页都需要以$sort 开头,才能以确定的顺序获取数据。然后,您可以使用$facet 根据您的范围在已排序的数据集上应用多个$skip$limit。在接下来的阶段中,您需要从多个范围 $concatArrays 然后使用 $unwind$replaceRoot 来获得原始文档的形状,在 Mongo shell 中尝试:

    for(var i = 0; i < 100; i++){
        db.col.save({ _id: i })
    } 
    
    
    db.col.aggregate([
        {
            $sort: { _id: 1 }
        },
        {
            $facet: {
                range1: [ { $limit: 1 } ],
                range2: [ { $skip: 60 }, { $limit: 11 } ]
            }
        },
        {
            $project: {
                docs: { $concatArrays: [ "$range1", "$range2" ] }
            }
        },
        {
            $unwind: "$docs"
        },
        {
            $replaceRoot: {
                newRoot: "$docs"
            }
        }
    ])
    

    输出:

    { "_id" : 0 }
    { "_id" : 60 }
    { "_id" : 61 }
    { "_id" : 62 }
    { "_id" : 63 }
    { "_id" : 64 }
    { "_id" : 65 }
    { "_id" : 66 }
    { "_id" : 67 }
    { "_id" : 68 }
    { "_id" : 69 }
    { "_id" : 70 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多