strapi/docs/v3.x/guides/count-graphql.md
Alexandre BODIN 61c0c9d9b4
Add v3.x and remove alpha docs (#6344)
Signed-off-by: Alexandre Bodin <bodin.alex@gmail.com>
2020-05-25 18:11:45 +02:00

80 lines
1.9 KiB
Markdown

# Count with GraphQL
This guide explains how to count data with a GraphQL query.
The count aggregation currently has some issues and this feature is also not available for Bookshelf (SQL databases).
With this guide we will code our own count query.
Here is the [GraphQL documentation](../plugins/graphql.md#customise-the-graphql-schema) which we will use to achieve our goal.
## Setup the application
In this example, we will use a **Restaurant** API.
Make sure you have a **Content Type** with some entries.
## Create schema.grahql file
To be able to add a new custom query (or mutation), we will have to create a `schema.grahql.js` file in your **Restaurant** API.
**Path**`./api/restaurant/config/schema.graphql.js`
```js
module.exports = {
query: ``,
resolver: {
Query: {},
},
};
```
## Create count query
The `count` query will call the [`count`](../concepts/services.md#core-services) service function of the **Restaurant** API.
It needs a JSON object as params, so we will add a `where` options in the GraphQL query.
**Path**`./api/restaurant/config/schema.graphql.js`
```js
module.exports = {
query: `
restaurantsCount(where: JSON): Int!
`,
resolver: {
Query: {
restaurantsCount: {
description: 'Return the count of restaurants',
resolverOf: 'application::restaurant.restaurant.count',
resolver: async (obj, options, ctx) => {
return await strapi.api.restaurant.services.restaurant.count(options.where || {});
},
},
},
},
};
```
And tada, you can now request the `count` of your Content Type.
## Query example
- Count all restaurants
```
{
restaurantsCount
}
```
- Count all restaurants that have `_3rd` as district value.
Based on the [FoodAdvisor](https://github.com/strapi/foodadvisor) restraurant model.
```
{
restaurantsCount(where: { district: "_3rd" })
}
```