功能简介
Aggregation 在调用者可见的 Row 集合上执行 count、sum、avg、min、max 与 groupBy。它复用 Query 过滤和资源权限,并可在 transactionId 存在时把本事务内尚未提交的变化纳入统计。
当前支持范围
- 行聚合(APPBASE_ENHANCED):按行权限执行 count、sum、avg、min、max 与分组统计,并可把当前事务的未提交变更纳入结果。
适用场景
- 按状态、地区或类别汇总业务数据。
- 生成受用户权限约束的统计卡片。
- 在事务提交前校验聚合结果。
前置条件
- 目标字段类型适合对应聚合函数。
- Table 已有支撑过滤条件的 Index。
- 调用者拥有 rows.read,并能读取参与统计的 Row。
Console 操作路径
Console 当前没有独立 Aggregation 构建器。请在应用或服务端通过 Web/Server SDK、REST 调用;Console 可用于检查 Table、Columns、Indexes 与 Row Permissions。
SDK 示例
SDK · TypeScript
import { Client } from 'appbase-web-sdk';
const client = new Client()
.setEndpoint('https://<APPBASE_HOST>/v1')
.setProject('<PROJECT_ID>');
import { TablesDB, Query } from 'appbase-web-sdk';
const tables = new TablesDB(client);
const result = await tables.aggregateRows({
databaseId: '<DATABASE_ID>',
tableId: '<TABLE_ID>',
select: ['status', 'count(*) AS total', 'sum(amount) AS amountTotal'],
groupBy: ['status'],
queries: [Query.equal('enabled', [true])]
});REST 示例
REST · Bash
curl --get 'https://<APPBASE_HOST>/v1/tablesdb/<DATABASE_ID>/tables/<TABLE_ID>/aggregation' \
-H 'X-Appwrite-Project: <PROJECT_ID>' \
-H 'X-Appwrite-JWT: <USER_JWT>' \
--data-urlencode 'select[]=status' \
--data-urlencode 'select[]=count(*) AS total' \
--data-urlencode 'groupBy[]=status'常见错误
| 现象 | 处理建议 |
|---|---|
general_query_invalid | 移除分页、排序、cursor 或不支持的 select 组合,并检查字段类型。 |
database_timeout | 缩小过滤范围、补充 Index 或拆分聚合。 |
transaction_not_ready | transactionId 已提交、回滚或过期。 |
403 | 检查 rows.read 与 Table/Row read Permission。 |
当前限制
- Pagination、ordering、cursor 与普通 select Query 不适用于该接口。
- groupBy、select 表达式数量和事务变更规模有处理上限。
- Aggregation 不是任意 SQL,也不开放数据库直连。
Appwrite 兼容说明
Query 与 Permission 概念保持兼容;聚合表达式、事务视图和响应模型属于 AppBase 增强。
AppBase 增强说明
AppBase 把聚合放在 Row 权限和 Schema 可见列边界内,并提供 aggregateRows SDK 方法。
发布状态和验证 Commit
origin/main 已核验。验证 Commit:0363062a1c7ea08741975bb5ba0c3361663c9353。
权威来源文件列表
backend-candidate:docs/products/v2.3.x/tablesdb/aggregation.mdbackend-candidate:src/Appwrite/Platform/Modules/Databases/Http/TablesDB/Tables/Aggregation/Get.phpbackend-candidate:src/Appwrite/Platform/Modules/Databases/Services/RowAggregationService.phpbackend-candidate:tests/e2e/Services/TablesDB/TablesDBAggregationTest.php
Appwrite taxonomy 仅作信息架构参考:https://appwrite.io/docs/products/databases。上游页面不是 AppBase 实现证据。