返回 Graphql 计数

Bar*_*rry 6 graphql

我有这个 Graphql 查询

 "{TABLE_NAME{
    id
    severity
    des
    ip
    hostname
    description

  }
}"; 
Run Code Online (Sandbox Code Playgroud)

也就是返回1000多条记录,怎么办:

SELECT COUNT(*) FROM TABLE_NAME
Run Code Online (Sandbox Code Playgroud)

在 Graphql 中?

vbr*_*den 3

简短的回答是你不知道。GraphQL 对象类型不一定会 1:1 映射到数据库表,因此您不能这样看待它。如果您想从表中获取计数,则需要将其作为字段添加到输出类型或作为其自己的字段。我假设因为您想在查询之前找出表有多大,所以您需要一个“tableInfo”类型的查询,如下所示

const TableInfo = new GraphQLObjectType({
  name: 'TableInfo',
  fields: {
    count: GraphQLInt
  }
})
const Query = new GraphQLObjectType({
  name: 'Query',
  fields: {
    tableInfo: {
      type: TableInfo,
      args: {
        name: new GraphQLNonNull(GraphQLString)
      },
      resolve (source, args) {
        return new Promise((resolve, reject) => {
          connection.query(
            'SELECT COUNT(*) from ' + args.name,
            (error, results) => {
              return error ? reject(error) : resolve(results)
            }
          )
        })
      }
    }
  }
})
const schema = new GraphQLSchema({
  query: Query
})
Run Code Online (Sandbox Code Playgroud)

然后请求

query Info {
  tableInfo(name: "my_table") {
    count
  }
}
Run Code Online (Sandbox Code Playgroud)

也就是说,这不是一个好的模式,如果您期望查询返回大量结果,则应该使用分页。最佳实践在这里http://graphql.org/learn/pagination/