參考
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 —— 按優先順序降序,然後
最早的在前。