Skip to content

Пагинация

При работе с большими наборами данных важно использовать пагинацию. Kodzero SDK предоставляет удобные инструменты для постраничной навигации.

Базовая пагинация

Метод findMany

Для простой пагинации используйте параметры page и perPage:

js
// Первая страница, 10 записей
const page1 = await Product.findMany({
  page: 1,
  perPage: 10
})

// Вторая страница
const page2 = await Product.findMany({
  page: 2,
  perPage: 10
})

Продвинутая пагинация

Метод findManyPaginated

Для полноценной работы с пагинацией используйте findManyPaginated, который возвращает объект PaginatedResult:

js
const result = await Product.findManyPaginated({}, 1, 25)

// Данные
console.log(result.data)  // массив товаров

// Состояние пагинации
console.log(result.state.page)       // текущая страница
console.log(result.state.total)      // всего документов
console.log(result.state.totalPages) // всего страниц
console.log(result.state.limit)      // документов на странице
console.log(result.state.left)       // осталось документов

Объект PaginatedResult

СвойствоТипОписание
dataT[]Массив документов текущей страницы
state.pagenumberНомер текущей страницы
state.totalnumberОбщее количество документов
state.totalPagesnumberОбщее количество страниц
state.limitnumberКоличество документов на страницу
state.skipnumberКоличество пропущенных документов
state.leftnumberКоличество оставшихся документов

Навигация по страницам

PaginatedResult предоставляет методы для навигации:

js
const result = await Product.findManyPaginated({}, 1, 25)

// Переход к следующей странице
await result.next()
console.log(result.data)        // данные новой страницы
console.log(result.state.page)  // 2

// Переход к предыдущей странице
await result.previous()
console.log(result.state.page)  // 1

Примеры использования

Простой список с пагинацией

ts
async function loadProducts(page: number = 1) {
  const result = await Product.findManyPaginated({}, page, 25)
  
  return {
    products: result.data,
    pagination: {...result.state}
  }
}

Комбинирование с фильтрами

Пагинацию можно комбинировать с другими параметрами запроса:

js
const result = await Product.findManyPaginated(
  {
    search: 'Наушники',
    sort: '-price',
    fields: ['title', 'price', 'status']
  },
  1,  // страница
  25  // на страницу
)

test