web-dev-qa-db-fra.com

Graphql peut-il renvoyer des nombres agrégés?

Graphql est génial et j'ai commencé à l'utiliser dans mon application. J'ai une page qui affiche des informations récapitulatives et j'ai besoin de graphql pour renvoyer les nombres agrégés? Cela peut-il être fait?

33
orbital

Vous définiriez un nouveau type GraphQL qui est un objet qui contient une liste et un nombre. Le nombre serait défini par une fonction résolveur.

Sur votre serveur GraphQL, vous pouvez définir la fonction résolveur et dans ce cadre, vous devrez écrire le code qui effectue les calculs et les requêtes nécessaires pour obtenir les nombres agrégés.

Ceci est similaire à la façon dont vous écririez un sérialiseur d'objet pour une API REST ou un point de terminaison API personnalisé REST qui exécute les requêtes de base de données nécessaires pour calculer l'agrégat). compte.

La force de GraphQL est qu'il donne au frontend plus de puissance pour déterminer quelles données sont spécifiquement retournées. Une partie de ce que vous écrivez dans GraphQL sera la même que celle que vous écririez pour une API REST.

21
Rudolf Olah

Il n'y a pas de fonction d'agrégation automatique dans GraphQL lui-même.

Vous pouvez ajouter un champ appelé summary et, dans la fonction resolve, calculer les totaux.

12
Petr Bela

... besoin de graphql pour renvoyer les nombres agrégés? Cela peut-il être fait?

Oui, ça peut se faire.

GraphQL le fait-il automatiquement pour vous? Non, car il ne sait pas où se trouve votre source de données.

Comment? GraphQL ne dicte pas comment vous obtenez/mute les données que l'utilisateur a interrogées. C'est à votre implémentation d'obtenir les données agrégées demandées. Vous pouvez obtenir des données agrégées directement à partir de votre MongoDB et les renvoyer, ou vous pouvez obtenir toutes les données dont vous avez besoin à partir de votre source de données et faire l'agrégation vous-même.

10
Hafiz Ismail

Vous devez définir un Type de données agrégées dans Graphql et une fonction que vous souhaitez implémenter. Par exemple, si vous souhaitez écrire la requête suivante:

SELECT age, sum(score) from student group by age;

Vous devez définir le type de données que vous souhaitez renvoyer:

 type StudentScoreByAge{
      age: Int
      sumOfScore: Float
    }

et une fonction Graphql:

 getStudentScoreByAge : [StudentScoreByAge]
    async function(){
        const res = await client.query("SELECT age, sum(score) as sumOfScore 
                                        from Student group by age");
        return res.rows;
    }
6
Enayat