Mongodb是否可以将“ skip”指定为索引范围?

时间:2018-12-27 16:56:36

标签: mongodb pagination

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

1 个答案:

答案 0 :(得分:1)

可以使用Aggregation Framework获取指定多个范围的数据。每个分页都必须以$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 }