首页 > 其他分享 >通用查询语言(GQL)

通用查询语言(GQL)

时间:2023-02-15 11:34:38浏览次数:44  
标签:GQL 20 name age 查询 filters 等于 通用 查询语言

在微服务开发中,经常遇到各种查询的需求,不同接口还有不同的查询方式,为了统一不同模型,不同筛选条件,动态筛选,复合条件筛选等各种场景查询方式,无需改代码支持不同场景下的查询需求,特定义了通用查询语言(GQL)。

以下是一些通用查询语言示例:

  • 查询所有姓王的用户:
    GET /api/users?filters=name%5E%3D%E7%8E%8B
    其中filters的值是name^=王的urlencode编码

      以下为了方便理解,只展示filters编码前的内容

  • 查询所有不姓王的用户:
    name^!=王

  • 查询所有姓王且年龄大于20岁的用户:
    name^=王&ag>20

  • 查询所有王姓和李姓且年龄大于30岁的用户:
    (name^=王|name^=李)&ag>30

  • 查询年龄正好是12,24,36岁的用户:
    age IN[12,24,36]

  • 查询20岁以上的用户,按年龄倒序排列:
    GET /api/users?sort=-age&filters=age>20

  • 查询20岁以上的用户,按年龄倒序排列, 每页5条,取第三页数据:
    GET /api/users?sort=-age&skip=20&take=5&filters=age>20

  • 查询20岁以上的用户,按年龄倒序排列, 每页5条,取第三页数据, 仅返回姓名和年龄两列数据:
    GET /api/users?sort=-age&skip=20&take=5&fields=name,age&filters=age>20

以下是GQL的详细说明

排序
sort: [[+-]FieldName,]
排序示例:
sort=+name,-date

分页

  • skip:跳过多少条记录
  • take:返回多少条记录

字段过滤

  • fields:逗号分隔的字段名列表,如果指定了该参数,则只返回指定的字段,用来加速网络传输。

字段过滤示例:
fields=name,age,date

筛选
筛选由逻辑运算和基础筛选单元构成,逻辑运算包括与,或,括号,基础筛选单元由字段名,比较符,值组成,若值中包含特殊字符,则需要urlencode。

筛选示例:
filters=name^=王&age>20&job IN[aaa,bbb,ccc]

以下是所有的比较符:
=, *=, ^=, $=, !=, *!=, ^!=, $!=, >, <, >=, <=, IS NULL, IS NOT NULL, IN[]

  • 各类型支持的比较符

    • 字符型(等于,包含,开始于,结束于,不等于,不包含,不开始于,不结束于,为空,不为空, IN Array[])
    • 数值型(等于,大于,小于,大于等于,小于等于,不等于,为空,不为空, IN Array[])
    • 日期型(等于,大于,小于,大于等于,小于等于,不等于,为空,不为空, IN Array[])
    • 布尔型(等于,不等于,为空,不为空, IN Array[])
    • 子表关联出的列表(包含,不包含)
  • 逻辑运算

    • 与:&
    • 或:|
    • 括号:()

逻辑运算支持嵌套, 与优先于或,所以连续用或必须用括号包起来

标签:GQL,20,name,age,查询,filters,等于,通用,查询语言
From: https://www.cnblogs.com/xminn/p/17122161.html

相关文章