Ordering & Pagination

Use Strapi's Entity Service API to order and paginate queries results.

Ordering & Pagination

The Entity Service API offers the ability to order and paginate results found with its findMany() method.

Ordering

To order results returned by the Entity Service API, use the sort parameter. Results can be ordered based on a single or on multiple attribute(s) and can also use relational ordering.

Single

To order results by a single field, pass it to the sort parameter either:

  • as a string to sort with the default ascending order, or
  • as an object to define both the field name and the order (i.e. 'asc' for ascending order or 'desc' for descending order)
js
strapi.entityService.findMany('api::article.article', {
  sort: 'id',
})

// single with direction
strapi.entityService.findMany('api::article.article', {
  sort: { id: 'desc' },
})

Multiple

To order results by multiple fields, pass the fields as an array to the sort parameter either:

  • as an array of strings to sort multiple fields using the default ascending order, or
  • as an array of objects to define both the field name and the order (i.e. 'asc' for ascending order or 'desc' for descending order)
js
strapi.entityService.findMany('api::article.article', {
  sort: ['publishDate', 'name'],
})

// multiple with direction
strapi.entityService.findMany('api::article.article', {
  sort: [{ title: 'asc' }, { publishedAt: 'desc' }],
})

Relational ordering

Fields can also be sorted based on fields from relations:

js
strapi.entityService.findMany('api::article.article', {
  sort: {
    author: {
      name: 'asc',
    },
  },
})

Pagination

Results can be paginated using 2 different strategies (see REST API documentation for more details):

  • pagination by page, when defining the page and pageSize parameters,
  • and pagination by offset, when defining the start and limit parameters.

2 different functions can be used to paginate results with the Entity Service API and accept different pagination strategies:

Function namePossible pagination method(s)
findMany()Offset pagination only
findPage()
  • Offset pagination
  • Page pagination

findMany() should only be used with offset pagination:

js
strapi.entityService.findMany('api::article.article', {
  start: 10,
  limit: 15,
})

findPage() accepts both offset and page pagination, provided you use only one pagination strategy per query:

js
strapi.entityService.findPage('api::article.article', {
  start: 10,
  limit: 15,
})
js
strapi.entityService.findPage('api::article.article', {
  page: 1,
  pageSize: 15,
})