【发布时间】:2018-12-28 04:38:03
【问题描述】:
在 Mongodb 中进行分页是否可以将 skip 指定为索引范围,即假设我在第 6 页,并且我想从 (1-59) 跳过文档并在 (0 & 60-70) 返回文档是否可以在单个查询中。
【问题讨论】:
标签: mongodb pagination
在 Mongodb 中进行分页是否可以将 skip 指定为索引范围,即假设我在第 6 页,并且我想从 (1-59) 跳过文档并在 (0 & 60-70) 返回文档是否可以在单个查询中。
【问题讨论】:
标签: mongodb pagination
可以使用聚合框架获取指定多个范围的数据。每个分页都需要以$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 }
【讨论】: