复杂数据查询

本章节详细介绍基于数据模型处理器和Gou Query DSL两种数据查询方式。建议在阅读前学习关系型数据库基础知识,了解SQL语法 ,可以编写基本的SQL语句。

使用 Model 处理器查询

数据模型处理器 Find, Get, Paginate, UpdateWhere, DeleteWhere, DestroyWhere 均支持传入查询参数 Object QueryParam,对读取记录范围进行限定。

Object QueryParam:

查看源码

数据结构说明:

查看数据结构

使用 Query DSL 查询

Query DSL 可以在数据流中使用,一般用于数据分析统计等更为复杂的场景。

对数据表 service (见下表)分析, 统计各行业最高分。

idindustriescityscorecreated_atupdated_at
1["旅游", "教育"]北京992021-10-03 13:40:52NULL
2["旅游", "教育"]上海682021-10-03 13:40:52NULL
3["旅游", "教育"]北京922021-10-03 13:40:52NULL
4["旅游", "教育"]上海872021-10-03 13:40:52NULL
5["旅游", "教育"]北京712021-10-03 13:46:06NULL

Query DSL 示例:

查看源码

在 Flow 中使用

在数据流中,可以使用 {{$in}}?:$in 接收参数, {{$res}}?:$res 引用节点查询结果。

提示:在数据流中通过 {{$xxx}} ?:$xxx 使用变量写法等效。

使用模型处理器

{
"label": "查询最新数据",
"version": "1.0.0",
"description": "查询系统最新数据",
"nodes": [
{
"name": "宠物",
"process": "models.pet.Get",
"args": [
{
"select": ["id", "name", "created_at"],
"wheres": [{ "column": "online", "value": "{{$in.0}}" }],
"orders": [{ "column": "created_at", "option": "desc" }],
"limit": 10
}
]
}
],
"output": "{{$res.宠物}}"
}

使用 Query DSL

{
"label": "查询最新数据",
"version": "1.0.0",
"description": "查询系统最新数据",
"nodes": [
{
"name": "宠物最新数据",
"engine": "xiang",
"query": {
"select": ["id", "name", "online", "created_at"],
"from": "$pet",
"wheres": [{ ":kind": "类型", "=": "?:$in.0" }],
"orders": "created_at desc",
"limit": 10
}
}
],
"output": "{{$res.宠物最新数据}}"
}

在 Script 中使用

function test(online) {
var query = new Query();
var data = query.Get({
select: ["id", "name", "online", "created_at"],
wheres: [
{ ":deleted_at": "删除", "=": null },
{ ":online": "类型", "=": online },
],
orders: "created_at desc",
from: "$pet",
});
return data;
}

在数据表格中使用

在数据表格中,可以使用 filter 传递查询参数。查询参数通过 URL Query String 传递给数据表格接口。

指定查询参数名称:

{
"name": "宠物",
"version": "1.0.0",
"decription": "宠物管理表格",
"bind": { "model": "pet" },
"apis": {},
"columns": {},
"filters": {
"关键词": {
"label": "关键词",
"bind": "where.name.match",
"input": { "type": "input", "props": { "placeholder": "请输入关键词" } }
}
},
"list": {
"filters": ["关键词"],
...
},
"edit": {}
}

在点击界面搜索按钮时,系统向表格 search API 请求数据,并传入 bind 中声明的参数名和用户填写数值:

GET /api/xiang/table/pet?where.name.match=xxx

复杂数据查询

本章节详细介绍基于数据模型处理器和Gou Query DSL两种数据查询方式。建议在阅读前学习关系型数据库基础知识,了解SQL语法 ,可以编写基本的SQL语句。

使用 Model 处理器查询

数据模型处理器 Find, Get, Paginate, UpdateWhere, DeleteWhere, DestroyWhere 均支持传入查询参数 Object QueryParam,对读取记录范围进行限定。

Object QueryParam:

查看源码

数据结构说明:

查看数据结构

使用 Query DSL 查询

Query DSL 可以在数据流中使用,一般用于数据分析统计等更为复杂的场景。

对数据表 service (见下表)分析, 统计各行业最高分。

idindustriescityscorecreated_atupdated_at
1["旅游", "教育"]北京992021-10-03 13:40:52NULL
2["旅游", "教育"]上海682021-10-03 13:40:52NULL
3["旅游", "教育"]北京922021-10-03 13:40:52NULL
4["旅游", "教育"]上海872021-10-03 13:40:52NULL
5["旅游", "教育"]北京712021-10-03 13:46:06NULL

Query DSL 示例:

查看源码

在 Flow 中使用

在数据流中,可以使用 {{$in}}?:$in 接收参数, {{$res}}?:$res 引用节点查询结果。

提示:在数据流中通过 {{$xxx}} ?:$xxx 使用变量写法等效。

使用模型处理器

{
"label": "查询最新数据",
"version": "1.0.0",
"description": "查询系统最新数据",
"nodes": [
{
"name": "宠物",
"process": "models.pet.Get",
"args": [
{
"select": ["id", "name", "created_at"],
"wheres": [{ "column": "online", "value": "{{$in.0}}" }],
"orders": [{ "column": "created_at", "option": "desc" }],
"limit": 10
}
]
}
],
"output": "{{$res.宠物}}"
}

使用 Query DSL

{
"label": "查询最新数据",
"version": "1.0.0",
"description": "查询系统最新数据",
"nodes": [
{
"name": "宠物最新数据",
"engine": "xiang",
"query": {
"select": ["id", "name", "online", "created_at"],
"from": "$pet",
"wheres": [{ ":kind": "类型", "=": "?:$in.0" }],
"orders": "created_at desc",
"limit": 10
}
}
],
"output": "{{$res.宠物最新数据}}"
}

在 Script 中使用

function test(online) {
var query = new Query();
var data = query.Get({
select: ["id", "name", "online", "created_at"],
wheres: [
{ ":deleted_at": "删除", "=": null },
{ ":online": "类型", "=": online },
],
orders: "created_at desc",
from: "$pet",
});
return data;
}

在数据表格中使用

在数据表格中,可以使用 filter 传递查询参数。查询参数通过 URL Query String 传递给数据表格接口。

指定查询参数名称:

{
"name": "宠物",
"version": "1.0.0",
"decription": "宠物管理表格",
"bind": { "model": "pet" },
"apis": {},
"columns": {},
"filters": {
"关键词": {
"label": "关键词",
"bind": "where.name.match",
"input": { "type": "input", "props": { "placeholder": "请输入关键词" } }
}
},
"list": {
"filters": ["关键词"],
...
},
"edit": {}
}

在点击界面搜索按钮时,系统向表格 search API 请求数据,并传入 bind 中声明的参数名和用户填写数值:

GET /api/xiang/table/pet?where.name.match=xxx