Skip to content
English

QueryAggregationOptions ​

KIT · interface · 类型合同

Query aggregation contract: several ordered reads collapsed into one item list.

Place in the package: an optional App-side helper for merging results of the same query shape run against several inputs. The Kit owns ordering and optional stable-key merging; every real read, the merge policy and the meaning of an item stay with the App.

Exports: QueryAggregationOptions.

导入 ​

ts
import type { QueryAggregationOptions } from '@jangts/agent-core/kits/aggregation';
js
/** @typedef {import('@jangts/agent-core/kits/aggregation').QueryAggregationOptions} QueryAggregationOptions */

其他公开入口:@jangts/agent-core/types、@jangts/agent-core/kits/aggregation、@jangts/agent-core/kits。

定义 ​

ts
interface QueryAggregationOptions<Input, Item, Context>

泛型参数 ​

类型参数约束默认类型
Input——
Item——
Context——

字段结构 ​

字段类型必需说明
execute(input: Input, context: Context) => readonly Item[]必需只读。Reads one input. Called once per input, in caller order, and must return synchronously.
key((item: Item, input: Input, context: Context) => string) | undefined可省略只读。Optional stable merge key. Items with the same key collapse into the first position seen.
merge((item: Item, previous: Item | undefined, input: Input, context: Context) => Item) | undefined可省略只读。Combines a duplicate with the value merged so far; receives undefined for the first item.

成员目录 ​

成员用途
executeReads one input. Called once per input, in caller order, and must return synchronously.

成员详情 ​

execute ​

Reads one input. Called once per input, in caller order, and must return synchronously.

ts
QueryAggregationOptions.execute(input: Input, context: Context): readonly Item[]
参数类型传递说明
inputInput必需—
contextContext必需—

返回: readonly Item[]。

使用示例 ​

顺序汇总两次读取 ​

入门 · Node.js

ts
import { Aggregation } from '@jangts/agent-core/kits/aggregation';
const pages = new Map([[1, [{ id: 'a', title: '第一页' }]], [2, [{ id: 'a', title: '重复项' }, { id: 'b', title: '第二页' }]]]);
const query = Aggregation.defineQueryAggregation({ execute: (page: number) => pages.get(page) ?? [] });
console.log(query.collect([1, 2], undefined));
js
import { Aggregation } from '@jangts/agent-core/kits/aggregation';
const pages = new Map([[1, [{ id: 'a', title: '第一页' }]], [2, [{ id: 'a', title: '重复项' }, { id: 'b', title: '第二页' }]]]);
const query = Aggregation.defineQueryAggregation({ execute: (page) => pages.get(page) ?? [] });
console.log(query.collect([1, 2], undefined));

同一 collect 增加主键与保留策略 ​

配置 · Node.js

ts
import { Aggregation } from '@jangts/agent-core/kits/aggregation';
type Row = { id: string; title: string };
const pages = new Map<number, Row[]>([[1, [{ id: 'a', title: '第一页' }]], [2, [{ id: 'a', title: '重复项' }, { id: 'b', title: '第二页' }]]]);
const query = Aggregation.defineQueryAggregation({
  execute: (page: number) => pages.get(page) ?? [],
  key: (row: Row) => row.id,
  merge: (row: Row, previous: Row | undefined) => previous ?? row,
});
console.log(query.collect([1, 2], undefined));
console.log(Aggregation.mergeByKey([...pages.values()].flat(), row => row.id, (row, previous) => previous ?? row));
js
import { Aggregation } from '@jangts/agent-core/kits/aggregation';
const pages = new Map([[1, [{ id: 'a', title: '第一页' }]], [2, [{ id: 'a', title: '重复项' }, { id: 'b', title: '第二页' }]]]);
const query = Aggregation.defineQueryAggregation({
    execute: (page) => pages.get(page) ?? [],
    key: (row) => row.id,
    merge: (row, previous) => previous ?? row,
});
console.log(query.collect([1, 2], undefined));
console.log(Aggregation.mergeByKey([...pages.values()].flat(), row => row.id, (row, previous) => previous ?? row));

相关策略源码 ​

接口参考、使用示例与开发指南。