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