У меня есть многоразовая стадия разбивки на страницы, например:
const pagination = query => ([ // query are the http request's query params
{
$facet: {
rows: [
sortOrderStage(query),
skipStage(query),
limitStage(query),
],
totalCount: [{ $count: 'count' }],
},
},
{ $unwind: '$totalCount' },
{ $addFields: { totalCount: '$totalCount.count' } },
])
Когда мне нужно разбить на страницы, я добавляю ее к существующему конвейеру, который соответствует и фильтрует et c. У меня проблема в том, что когда входной набор пуст, часть $ facet просто возвращает и пустой массив. В этих случаях я хотел бы получить следующее:
{
rows: [],
totalCount: 0,
}
В настоящее время я обрабатываю результаты агрегации с дополнительным шагом:
const data = await Collection.aggregate([ ...pipelines, ...pagination(query)])
const { rows, totalCount } = data.length
? data[0]
: { rows: [], totalCount: 0 }
Есть ли способ изменить этап пагинации, так что мне не нужен этот последний шаг?