Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

GraphQL - kiểu tính toán trả về phụ thuộc vào đối số

Câu trả lời của Joe (thêm {"name":"ratio" , value:data.active/data.total} đến kết quả sau khi kết quả được tìm nạp từ cơ sở dữ liệu) sẽ thực hiện điều đó mà không thực hiện bất kỳ thay đổi lược đồ nào.

Là một phương pháp thay thế hoặc là một cách thanh lịch hơn để làm điều đó trong GraphQL, tên trường có thể được chỉ định trong chính kiểu thay vì chuyển chúng dưới dạng đối số. Và tính toán ratio bằng cách viết một trình phân giải.

Vì vậy, lược đồ GraphQL sẽ là:

Item {
  total: Int,
  active: Int,
  ratio: Float
}

type Query {
  items: [Item]
}

Máy khách chỉ định các trường:

{
  items {
    total 
    active 
    ratio
  }
}

Và tỷ lệ ratio có thể được tính toán bên trong trình phân giải.

Đây là mã:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. drupal mệnh đề điều kiện sql cho nhiều bảng?

  2. Chuyển đổi kết quả truy vấn mysql thành CSV (với sao chép / dán)

  3. Mô-đun Python MySQL

  4. Nhập dữ liệu đệm vào biểu mẫu trực tuyến trong trường hợp ngắt kết nối (Vợt)

  5. Bảo vệ SQL Injection