вернуть поля $ facet, если входной набор пуст - PullRequest
0 голосов
/ 30 января 2020

У меня есть многоразовая стадия разбивки на страницы, например:

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 }

Есть ли способ изменить этап пагинации, так что мне не нужен этот последний шаг?

...