1.ONES GraphQL 查询语句结构
以下通过类⽐ SQL 查询语句,对 ONES GraphQL 查询语句进⾏描述:

整个查询语句可以描述成:查询 uuid 等于 "4Y5qoeuL" 的⽤户名称。
由以上的查询语句,衍⽣出 4 个部分的内容,分别是 ONES GraphQL 语句类型、查询对象、查询条件及返回域, ⽂档会对这 4 部分内容分别进⾏描述。
2.ONES GraphQL 语句类型
ONES GraphQL ⽀持查询和修改,查询语句为 query{ } ,因为 ONES GraphQL 的主要⽤途是查询,所以默认情 况下可以将关键字 query 省去,即 { } 等同于 query{ } ,修改数据的语句为 mutation{ } ,⼀般情况下很 少使⽤ GraphQL 进⾏数据修改,如果需要 增删改 的操作,可以调⽤其他 Restful API 实现。
3.ONES GraphQL 查询对象
之前的描述中提到了 user 和 users 。
user 属于⽤户类型属性,除了 user 之外, ONES 系统中还有 task 、 project 等类型属性,每种类型属性都 是 ONES 系统已经定义好的数据模型,我们称之为 Schema 。所有的类型属性组成了 ONES GraphQL 的类型系 统,⽽所有的查询都是基于已被定义好的 Schema 之上。关于 ONES GraphQL Schema 定义,具体可以查看⽂档
「 ONES GraphQL Schema 」部分。
⽽ ONES GraphQL 的查询对象都是基于不同类型属性的 Item ,我们称之为属性列表,例如 users 、 tasks 、 projects 等。
4.ONES GraphQL 查询条件
groupBy orderBy filter 分别对应分组 排序 过滤
1.filter表示过滤,语法根据属性是否为固有属性会有所区别(通过属性类型字段builtIn进行区分)
①固有属性语法:filed_operand
②自定义属性:_filed_operand
file部分表示属性的字段 operand部分表示操作符
filter 的操作符可参照以下「操作符」部分的说明

范围字段二级运算符
range用于日期数据比较

浮点型字段二级运算符
between ⽤于整型浮点型数据⽐较

举例
综上所述,我们可以知道:
过滤条件不局限于 Item 的直接属性,嵌套属性⼀样可以作为筛选条件,例如上⾯例⼦中 project.name 属于直接属性,⽽ assign.name 属于嵌套属性 ;
过滤条件是树状结构,叶⼦节点的属性必须要加下划线 + 操作符; ⽀持多个过滤条件
2.groupBy
groupBy 表示分组,这⾥需要引⼊ bucket 概念, bucket 主要配合 groupBy 条件语句进⾏查询分组⼯作,例如

列出所有项⽬,即 projects
根据 groupBy 中的分组条件,按照负责⼈ assign 将数据分成 n 组,每⼀份都分别放到⼀个 bucket 中
因为是按照 assign 划分,所以每个 bucket 对应⼀个唯⼀的 assign ,可以在每个 bucket 中取出
assign 的任意属性
bucket 中语法使⽤规范
groupBy 的第⼀层必须是⼀个 Item ,表明要将哪些数据放到 bucket 中;第⼆层不能出现 Item ,表明这 些数据要依据哪个属性来进⾏分组;
bucket 能获取的属性,是依据 groupBy 决定,上⾯的例⼦按照 projects.assign 分组,因此可以在
bucket 中选取 projects 和 assign 属性。
3.orderBy
表示排序,可以对查询返回的结果,按照查询的item进行升序或降序

排序同样不局限于item的直接属性,嵌套属性一样可以进行排序,支持多级排序,叶子节点的属性必须要指定升序或降序
5.ONES GraphQL 返回域
返回域中的字段需要符合ones graphQL schema 定义,例如 工作项task的schema定义中不包含email属性,则无法在返回域中使用email字段,嵌套属性需要依次展开返回
以上内容,主要介绍了 ONES GraphQL 的相关概念,接下来会介绍如何使⽤ ONES GraphQL 。