【发布时间】:2021-06-19 21:28:07
【问题描述】:
我想在以下查询返回的数组上实现分页:
const aggregationQuery : any[]= [
{
$match: filter
},
{
$group: {
_id: '$reqID',
docs:{
$first: {
"_id": "$_id",
"reqID": "$reqID",
"userID": "$userID",
"sharerID": "$sharerID",
"createdAt": "$createdAt",
"destination": "$destination"
}
},
},
},
{ $sort: { _id: -1 }},
{ $skip: startingIndex },
{ $limit: pageSize }
];
const transfers: IPaginatedTransfer[] = await transferModel.aggregate(aggregationQuery);
startingIndex 和 pageSize 是我想要的页面的指示器。
查询有效,但是我还想知道给定页面大小的页面总数(换句话说,数组中没有跳过和限制的对象总数)。
有没有一种有效的方法来实现它,同时避免查询完整的数组并获取它的长度?
注意:一个简单的countDocuments 不是我想要的,因为我想要分组后的计数。
【问题讨论】:
-
使用$facet阶段和分离结果,
{ $facet: { result: [ { $skip: startingIndex }, { $limit: pageSize } ], count: [ {$count: "count"} ] } }
标签: mongoose pagination mongodb-query grouping aggregation