全部文档
文档中心DeepModel功能DeepQL常用语法与使用技巧一、查什么:select 与结果形状

一、查什么:select 与结果形状

DeepQL 是 DeepModel(对象层)的查询语言,用于在查询器、计算属性/链接、访问规则等场景中查询对象数据。

一次查询针对一类对象(例如订单头、订单行)。用 select 指定要查的对象类型,用大括号 { } 指定要输出的形状(哪些属性、哪些链接)。

Copy
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 指向头,头删则行删;订单头通过链接 customerwarehouse 指向客户与仓库。

不加任何条件,只查订单头的三个属性:订单号、订单日期、状态。

Copy
select Order {
    order_no,
    order_date,
    status
}

结果示意(JSON):每条记录是一个订单头对象,仅包含上述三个字段。

Copy
[
  { "order_no": "ORD001", "order_date": "2023-10-01", "status": "draft" },
  { "order_no": "ORD002", "order_date": "2023-10-02", "status": "confirmed" }
]

不想逐个列出属性时,可用星号快速返回所有字段:

写法

含义

select Order { * }

返回 Order 的所有属性(不含链接对象的详细字段)

select Order { ** }

返回 Order 的所有属性,并展开一层链接对象的属性

示例:快速查看订单头的全部属性。

Copy
select Order { * }
limit 1

结果示意:返回 id、order_no、order_date、status 等所有属性。

Copy
[
  { "id": "...", "order_no": "ORD001", "order_date": "2023-10-01", "status": "draft" }
]

** 双星号会在此基础上多展开一层链接(如 customer、warehouse 的属性),适合快速查看完整数据,但字段较多。

提示:Splat 适合在查询器中快速调试;正式的计算属性/链接中建议显式列出字段。

select 不仅能查对象,也能直接查标量值或组合成自由对象(Free Object):

Copy
# 直接查标量
select 'hello world'
Copy
# 集合
select {1, 2, 3}
Copy
# 自由对象:把多个表达式打包到一行结果中
select {
    today := cal::local_datetime_of_statement(),
    order_count := count(Order),
    draft_count := count(Order filter .status = 'draft')
}

结果示意:

Copy
{
  "today": "2023-10-10T14:00:00",
  "order_count": 5,
  "draft_count": 2
}

自由对象适合在查询器里一次性查多个统计,不需要与某个具体对象类型绑定。

概念

说明

select

选择要查询的对象类型,或查标量值

大括号 { }

指定返回结果的形状(要哪些属性/链接)

逗号

分隔多个属性或链接

* / **

返回所有属性 / 所有属性并展开一层链接

自由对象

select { key := expr, ... } 打包多个表达式

下一步可以为查询加上条件、排序和条数限制,见「二、缩小范围:条件、排序、条数」。

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send