DeepQL 是 DeepModel(对象层)的查询语言,用于在查询器、计算属性/链接、访问规则等场景中查询对象数据。
一次查询针对一类对象(例如订单头、订单行)。用 select 指定要查的对象类型,用大括号 { } 指定要输出的形状(哪些属性、哪些链接)。
select 对象类型 {
属性1,
属性2,
...
}
对象类型:如 Order(订单头)、OrderLine(订单行)。
大括号内:列出要返回的属性或链接的编码,用逗号分隔。返回结果中每条记录都包含这些字段。
后文示例统一使用「订单单据」场景:订单头(Order) 与 订单行(OrderLine) 头行结构,行表通过链接指向头表,并配置级联删除(删除订单头时自动删除其下所有订单行)。订单头另有关联的主数据:客户、仓库。
|
对象 |
说明 |
主要属性/链接 |
|---|---|---|
|
Order |
订单头 |
order_no(订单号), order_date(订单日期), status(状态:draft/confirmed/done), customer→Customer, warehouse→Warehouse |
|
OrderLine |
订单行 |
line_no(行号), product_name(商品名称), qty(数量), price(单价), order→Order(头,级联删除) |
|
Customer |
客户(主数据) |
code(客户编码), name(多语言名称,JSON:{“zh-cn”: “”, “en”: “”}) |
|
Warehouse |
仓库(主数据) |
code(仓库编码), name(仓库名称) |
关系:一个订单头对应多条订单行,行通过链接 order 指向头,头删则行删;订单头通过链接 customer、warehouse 指向客户与仓库。
不加任何条件,只查订单头的三个属性:订单号、订单日期、状态。
select Order {
order_no,
order_date,
status
}
结果示意(JSON):每条记录是一个订单头对象,仅包含上述三个字段。
[
{ "order_no": "ORD001", "order_date": "2023-10-01", "status": "draft" },
{ "order_no": "ORD002", "order_date": "2023-10-02", "status": "confirmed" }
]
不想逐个列出属性时,可用星号快速返回所有字段:
|
写法 |
含义 |
|---|---|
|
|
返回 Order 的所有属性(不含链接对象的详细字段) |
|
|
返回 Order 的所有属性,并展开一层链接对象的属性 |
示例:快速查看订单头的全部属性。
select Order { * }
limit 1
结果示意:返回 id、order_no、order_date、status 等所有属性。
[
{ "id": "...", "order_no": "ORD001", "order_date": "2023-10-01", "status": "draft" }
]
** 双星号会在此基础上多展开一层链接(如 customer、warehouse 的属性),适合快速查看完整数据,但字段较多。
提示:Splat 适合在查询器中快速调试;正式的计算属性/链接中建议显式列出字段。
select 不仅能查对象,也能直接查标量值或组合成自由对象(Free Object):
# 直接查标量
select 'hello world'
# 集合
select {1, 2, 3}
# 自由对象:把多个表达式打包到一行结果中
select {
today := cal::local_datetime_of_statement(),
order_count := count(Order),
draft_count := count(Order filter .status = 'draft')
}
结果示意:
{
"today": "2023-10-10T14:00:00",
"order_count": 5,
"draft_count": 2
}
自由对象适合在查询器里一次性查多个统计,不需要与某个具体对象类型绑定。
|
概念 |
说明 |
|---|---|
|
select |
选择要查询的对象类型,或查标量值 |
|
大括号 |
指定返回结果的形状(要哪些属性/链接) |
|
逗号 |
分隔多个属性或链接 |
|
|
返回所有属性 / 所有属性并展开一层链接 |
|
自由对象 |
|
下一步可以为查询加上条件、排序和条数限制,见「二、缩小范围:条件、排序、条数」。
回到顶部
咨询热线
