參考

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

另請參閱

  • REST API —— 接受 ObjectQL 的端點
  • 欄位型別 —— 每個欄位儲存什麼,因而可以按什麼過濾
  • CEL —— $cel 內部的表示式語言