sql >> データベース >  >> RDS >> Mysql

GraphQL-引数に依存する計算された型を返します

    ジョーの答え({"name":"ratio" , value:data.active/data.total}を追加 結果がデータベースからフェッチされると、結果に対して)スキーマを変更せずにそれを実行します。

    別の方法として、またはGraphQLでそれを行うためのより洗練された方法として、フィールド名を引数として渡す代わりに、型自体で指定することができます。そして、ratioを計算します リゾルバを作成することによって。

    したがって、GraphQLスキーマは次のようになります。

    Item {
      total: Int,
      active: Int,
      ratio: Float
    }
    
    type Query {
      items: [Item]
    }
    

    クライアントはフィールドを指定します:

    {
      items {
        total 
        active 
        ratio
      }
    }
    

    そしてratio リゾルバ内で計算できます。

    コードは次のとおりです:

    const express = require('express');
    const graphqlHTTP = require('express-graphql');
    const { graphql } = require('graphql');
    const { makeExecutableSchema } = require('graphql-tools');
    const getFieldNames = require('graphql-list-fields');
    
    const typeDefs = `
    type Item {
      total: Int,
      active: Int,
      ratio: Float
    }
    
    type Query {
      items: [Item]
    }
    `;
    
    const resolvers = {
      Query: {
        items(obj, args, context, info) {
          const fields = getFieldNames(info) // get the array of field names specified by the client
          return context.db.getItems(fields)
        }
      },
      Item: {
        ratio: (obj) => obj.active / obj.total // resolver for finding ratio
      }
    };
    
    const schema = makeExecutableSchema({ typeDefs, resolvers });
    
    const db = {
      getItems: (fields) => // table.select(fields)
        [{total: 10, active: 5},{total: 5, active: 5},{total: 15, active: 5}] // dummy data
    }
    graphql(
      schema, 
      `query{
        items{
          total,
          active,
          ratio
        }
      }`, 
      {}, // rootValue
      { db } // context
    ).then(data => console.log(JSON.stringify(data)))
    


    1. MySQLデータベースからデータを更新できません

    2. MySQLの左結合をPHPと2つの別々のクエリでループする

    3. 日付範囲の機器の総数を計算する

    4. テーブル'/tmp/#sql_18b4_0.MYI'のキーファイルが正しくありません。修復しようとしました