参考

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 内部的表达式语言