-
Couldn't load subscription status.
- Fork 1
Filter
marstone edited this page Dec 8, 2022
·
14 revisions
- Filter is a GraphQL Query#Argument try to standardize GraphQL Searching
- Inspired by SQL WHERE CLAUSE & OData $filter
- Example:
users(filter: { name: {eq: $name } }) {
name
}- 正规式定义
Filter := FilterMap
FilterMap := <Field, OperatorMap> | <_ORs, [Filter]>
OperatorMap := <Operator, ParameterName>- 类型描述
Filter: {
{Field}: {
{Operator} : $Parameter
},
_ORs: [Filter]
}- Field 之间、Field 与 _ORs 之间,是 AND 关系
- _ORs 里各个 Filter 之间,是 OR 关系
- _ORs 大小写敏感。
- 和类型中字段名相同
| 操作符 | 含义 | 参数 |
|---|---|---|
| eq | 等于 | 同Field类型 |
| neq | 不等于 | 同Field类型 |
| like | 匹配 | String,包括%部分 |
| ieq | 大小写不敏感相等 | String |
| in | 包括 | List |
| nin | 不包含 | List |
| gt | 大于 | Number |
| lt | 小于 | Number |
| gte | 大于等于 | Number |
| lte | 小于等于 | Number |
| bt | Between,相当于gte & lte | [Number,Number] |
- 多个Filter之间是 "与" 的关系
- 限定某些字段和某些值的匹配关系,举例:
- name: { eq: "小明" }, // name 字段等于“小明”
- 函数使用,纯概念,尚未实现
- dept: { in: closure("计算机系",-INF)} // dept 字段在计算机系所在部门树的节点的祖先路径上
- 参数可以使用一些和用户三元组有关的内置变量,这包括:
- $ACCOUNT:当前用户账号,参考Principal
- $OPENID:当前用户openid
- $USERCODES:当前用户的usercode列表
- $DEPTS:当前用户有权限的部门列表 (待议)
- $BIZES: 当前用户有权限的业务列表 (待议)
- $DEPT_BIZES:当前用户有权限的(部门:业务)组合列表 (待议)
- $CLIENT_ID: 当前应用 client_id