Filters
See the filters' concepts for details.
by default, the filters can only be used from find
endpoints generated by the Content Type Builder and the CLI. If you need to implement a filters system somewhere else, read the programmatic usage section.
Available operators
The available operators are separated in four different categories:
Filters
Easily filter results according to fields values.
=
: Equals_ne
: Not equals_lt
: Lower than_gt
: Greater than_lte
: Lower than or equal to_gte
: Greater than or equal to_contains
: Contains_containss
: Contains case sensitive
Examples
Find users having John
as first name.
GET /user?firstName=John
Find products having a price equal or greater than 3
.
GET /product?price_gte=3
Sort
Sort according to a specific field.
Example
Sort users by email.
- ASC:
GET /user?_sort=email:asc
- DESC:
GET /user?_sort=email:desc
Limit
Limit the size of the returned results.
Example
Limit the result length to 30.
GET /user?_limit=30
Start
Skip a specific number of entries (especially useful for pagination).
Example
Get the second page of results.
GET /user?_start=10&_limit=10
Programmatic usage
Requests system can be implemented in custom code sections.
Extracting requests filters
To extract the filters from an JavaScript object or a request, you need to call the strapi.utils.models.convertParams
helper.
The returned objects is formatted according to the ORM used by the model.
Example
Path — ./api/user/controllers/User.js
.
// Define a list of params.
const params = {
'_limit': 20,
'_sort': 'email'
};
// Convert params.
const formattedParams = strapi.utils.models.convertParams('user', params); // { limit: 20, sort: 'email' }
Query usage
Example
Path — ./api/user/controllers/User.js
.
module.exports = {
find: async (ctx) => {
// Convert params.
const formattedParams = strapi.utils.models.convertParams('user', ctx.request.query);
// Get the list of users according to the request query.
const filteredUsers = await User
.find()
.where(formattedParams.where)
.sort(formattedParams.sort)
.skip(formattedParams.start)
.limit(formattedParams.limit);
// Finally, send the results to the client.
ctx.body = filteredUsers;
};
};