По хорошему, это делается так:
Фронт-енд отвечает только за показ страницы по заданым фильтрам
Все данные запрашиваются на бекенде в формате
{
skip: %Пропущенные страницы% * %элементов на страницу%,
limit: %элементов на страницу%,
filers: [ваши фильтры]
}
Бекенд соответственно делает выборку согласно полученым фильтрам с учетом skip и limit (монга их умеет)