1 回答
TA贡献1852条经验 获得超1个赞
我找到了一种方法来获取查询的结果,并在同一次“旅行”中对数据库进行计数(仍然是 2 个查询,但在数据库中,因此速度要快得多)
关键是使用$facet(mongodb 3.4+):
const pipeline = [
{YOUR_QUERY},
{
$facet: {
paginatedResults: [{$skip: startIndex}, {$limit: limit}],
totalCount: [{$count: 'count'}]
}
},
{
$addFields: {
total: {
$ifNull: [{ $arrayElemAt: ['$totalCount.count', 0]}, 0]
}
}
},
{
$project: {
paginatedResults: 1,
total: 1
}
}
]
解释:$facet在同一个输入(我们的查询结果)上执行多个管道,我们可以有 1 个管道用于对结果进行分页,1 个用于计算总数。
由于$count返回一个包含该count字段的对象,并且 facet 包装在一个数组中,因此$addFields管道将实际count值提取为一个total字段。然后我只是用来$project删除不再需要的totalCount,这就是结果:
{
paginatedResults: [RESULTS],
total: 34
}
添加回答
举报