参考
ObjectQL
数据 API、视图、报表和 AI 工具背后的结构化查询格式 —— ObjectOS 在哪里使用它、几个示例,以及 objectstack.ai 上的完整语法。
完整规范:objectstack.ai 上的 ObjectQL 查询语法。本页是摘要:ObjectOS 在哪里使用它,以及几个示例。
ObjectQL 是数据引擎所使用的 JSON 查询格式。一个查询会指定一个对象,并说明返回
哪些记录:一个 where 过滤条件、一个 orderBy、一页(limit、offset)、要
expand 的关系,以及可选的 groupBy 加 aggregations。每个查询都以发起它的
用户身份运行,所以它只会返回该用户可以读取的记录和字段。
ObjectOS 在哪里使用它
- 数据 API ——
GET /api/v1/data/:object以查询字符串参数接收查询;POST /api/v1/data/:object/query接收完整的请求体,并且是接受groupBy和aggregations的那一个(REST API)。 - 视图 —— 视图的
filter和sort会编译为 ObjectQL (视图)。 - 报表 —— 报表会序列化为 ObjectQL。
- AI ——
query_data工具会生成一个 ObjectQL 请求体。
示例
**紧急或已逾期的未结工单。**字段运算符以 $ 开头;$and、$or 和 $not 用来
组合它们,{ "$cel": "…" } 会嵌入一个由服务器在查询时求值的 CEL 表达式:
{
"$and": [
{ "status": { "$eq": "open" } },
{
"$or": [
{ "priority": { "$in": ["high", "urgent"] } },
{ "due_at": { "$lt": { "$cel": "now()" } } }
]
}
]
}工单连同其处理人和客户账户,在一个批次中解析,而不是每行一个请求:
{
"object": "support_ticket",
"expand": ["assignee", "customer.account"],
"limit": 20
}每位客户超过 10,000 的月度销售额,使用 POST /data/order/query:
{
"object": "order",
"where": { "status": { "$ne": "cancelled" } },
"groupBy": [
"customer_id",
{ "field": "created_at", "dateGranularity": "month" }
],
"aggregations": [
{ "function": "sum", "field": "amount", "alias": "total_sales" },
{ "function": "count", "alias": "order_count" }
],
"having": { "total_sales": { "$gt": 10000 } },
"orderBy": [{ "field": "total_sales", "order": "desc" }],
"limit": 25
}在查询字符串中排序:?orderBy=-priority,created_at —— 按优先级降序,然后
最早的在前。