# 动态查询参数

查询参数对象在各查询接口中频繁使用,本文将对此对象进行说明。

各属性如下表所示:

名称 类型 示例值 描述
paging boolean true 是否启用分页
firstPageIndex Integer 0 第一页索引,默认为0
pageIndex Integer 0 第几页
pageSize Integer 25 每页显示记录条数,默认为25
sorts List<Sort> 用于排序的字段的集合,Sort对象在下面表格单独说明
terms List<Term> 条件集合,Term对象在下面表格单独说明
where String deviceId=test 查询条件表达式,和terms二选一
includes Set<String> ["name","id"] 指定要查询的字段
excludes Set<String> ["state","createTime"] 指定不查询的字段

# Sort

Sort对象各属性如下表所示:

名称 类型 示例值 描述
order String asc 顺序
name String createTime 字段名
type String long 类型

# Term

Term对象各属性如下表所示:

名称 类型 示例值 描述
column String deviceId 字段
value Object 23123213
type String and 链接类型 and或者or
termType String eq 条件类型,详细内容如下表
terms List<Term> 嵌套的条件

# TermType

TermType各条件如下所示:

类型值 条件
eq ==
not !=
like like
nlike not like
gt >
lt <
gte >=
lte <=
in in
nin not in
empty =''
nempty !=''
isnull is null
notnull not null
btw between
nbtw not between
dev-group 按设备分组查询对应设备数据,例查询testgroup分组下的设备: deviceId dev-group testgroup
dev-group-tree 查询设备分组及子分组对应设备数据,例查询testgroup分组及子分组下的设备: deviceId dev-group-tree testgroup
dev-latest 根据设备最新属性查询设备数据,例查询查询demo-device产品下最新数据temp大于10的设备: deviceId$dev-latest$demo-device is 'temp>10'
dev-same-group 查询相同设备下的数据,例查询与设备IDdeviceId0001相同分组下的设备: deviceId dev-same-group deviceId0001
dev-tag 根据设备标签查询设备数据,例查询标签key为tagKey值为tagValue的设备: deviceId dev-tag tagKey:tagValue
dev-prod-cat 根据产品分类查询设备数据,例查询产品分类为categoryid的设备: deviceId dev-prod-cat categoryid

说明

平台内置了一些自定义通用条件,以方便进行一些特殊的查询需求。 以上表格中dev-*的条件为设备相关的自定义条件,举例中使用的是动态查询条件中的where表达式,在实际使用中 也可以通过动态查询条件中的terms属性进行指定.

deviceId$dev-latest$demo-device is 'temp>10'为例, 表示的含义:

  • deviceId 表示要查询的字段,等同于Term.column=deviceId
  • $dev-latest 表示使用自定义条件dev-latest,等同于Term.termType=dev-latest
  • $demo-device 表示自定义条件需要的其他选项,等同于Term.options=[demo-device]
  • 'temp>10' 表示条件值为temp>10(注意单引号起转义作用),等同于Term.value=temp>10

# 示例

GET请求时:

//简单条件
http://[url]:[port]/api/_query?pageSize=20&where=name like %张三%

//复杂条件
http://[url]:[port]/api/_query?pageSize=20&terms[0].column=name&terms[0].value=%张三%&terms[0].termType=like

POST请求时:


//简单条件
{
    "pageSize":20,
    "pageIndex":0,
    "where":"name like %张三%"
}

//复杂条件
{
    "pageSize":20,
    "pageIndex":0,
    "terms":[
        [
            "column":"name",
            "value":"%张三%",
            "termType":"like"
        ]
    ]
}

# 滚动分页

部分存储方式支持滚动分页,能实现更快的查询性能,使用说明:

在执行分页查询时,可以根据返回分页结果中的:

{
    "scroll":true, //为true时表示支持滚动分页
    "scrollId":"", //滚动ID,需要在下次查询时携带此ID,为空则表示为最后一页
    "total":100,    // 数据总数
    "data":[        // 数据内容

    ]
}

在执行动态查询时,通过设置滚动ID到查询上下文中进行下一页查询:

{
  "context":{
    "scrollId":"" //上一页查询返回的scrollId
  }
 "terms":[],
 "total":65535 // 设置此值后,后端将不进行count操作,可以提升查询速度,滚动分页时建议设置为任意值.
}

注意

当查询条件变化后,需要重置滚动ID为空.