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
}
添加回答
舉報