还在为数据汇总头疼?Aggregate 节点才是你的救命稻草
笔者在 N8N大学 社区里潜水时,经常看到新手朋友在问这样一个问题:明明我前面的流程跑得好好的,获取到了 10 条客户数据,为什么到了发送邮件或者写入表格那一步,只显示了最后一条数据?或者,我想把这 10 条数据打包成一个 JSON 数组发给 API,却不知道从何下手?

这就是典型的“数据扁平化”处理不当。在 n8n 的世界里,数据流是像水流一样经过每个节点的。如果你不加以控制,它就会默认处理单条数据。要解决这个问题,我们需要一个神器——Aggregate(聚合)节点。
今天,笔者就带大家彻底搞懂这个节点,让你从“只会处理单条数据”的新手,进阶为“掌控数据流”的自动化高手。
一、先搞懂痛点:为什么我们需要聚合数据?
想象一个场景:你编写了一个流程,通过 HTTP 请求获取了过去 24 小时的所有工单信息。假设系统返回了 50 条工单数据。你的下一站是想调用一个 AI 接口,让 AI 总结这 50 条工单的主要问题。
如果你直接把这 50 条数据连到 HTTP Request 节点,默认情况下,n8n 会触发 50 次请求!这不仅效率低下,还可能让你的 API 账单爆炸。更糟糕的是,大多数 API 接口期望的输入格式是这样的:
{
"tickets": [
{ "id": 1, "title": "..." },
{ "id": 2, "title": "..." }
]
}
而不是单独发送 50 次。这就是 Aggregate 节点 存在的意义:它就像一个打包员,把散落的快递(数据条目)装进一个大箱子(数组或对象)里,一次性发出去。
二、核心实操:Aggregate 节点的三种“打包模式”
在 n8n 中,Aggregate 节点(在旧版中可能叫 Aggregate Function,新版中通常直接叫 Aggregate 或者在 Code 节点中处理)非常强大。为了让大家听得懂、学得会,我们把它拆解为最常用的三种实战模式。
模式 1:最简单的“全部塞进一个篮子” (Aggregates: Into a Single Field)
这是最常用的模式。假设你有一组订单数据,你想把它们变成一个 JSON 数组。
- 前置条件:你的上一个节点(比如 Google Sheets 读取或 HTTP Request)输出了多条数据。
- 添加节点:在上一个节点后添加 Aggregate 节点。
- 关键设置:
- Aggregate:选择
Into a Single Field(聚合为单个字段)。这告诉 n8n:“我要把所有数据揉成一团。” - Field to Aggregate:选择
Keep All Fields(保留所有字段)。或者,如果你只想保留特定字段(比如 ID),可以选Aggregate Specific Fields。 - Output Type:这是核心!选择
Array(数组)。如果你选 Object,它会变成一个大对象,通常我们传给 API 用 Array 居多。
- Aggregate:选择
做完这一步,你会看到输出变成了 1 条数据,该数据包含一个字段,里面装着一个由之前所有数据组成的 JSON 数组。完美!
模式 2:按类别分组打包 (Group Mode)
有时候我们需要的不是简单打包,而是分类打包。比如,你有 100 条销售记录,你想按“销售员”分组,统计每个人卖了多少单。
在 Aggregate 节点中:
- Aggregate:选择
Group Mode(分组模式)。 - Group Key:选择你想要分组的字段,比如
salesperson_name。 - Actions:这里就是计算规则了。你可以添加一个 Action,选择
Sum(求和),字段选amount。这样 n8n 就会自动把同名销售员的金额加总。
模式 3:利用 Code 节点做高级聚合(骚操作)
虽然 Aggregate 节点很直观,但如果你需要更灵活的处理(比如修改数据结构),Code 节点其实是更硬核的选择。
在 Code 节点里,你可以用 JavaScript 这样写:
// 获取上一步的所有数据
const items = $input.all();
// 打包成你想要的格式
const result = {
total_count: items.length,
data: items.map(item => item.json)
};
// 返回结果
return { json: result };
这比 Aggregate 节点更灵活,但也需要一点点代码基础。N8N大学 建议新手先从 Aggregate 节点上手,熟练后再挑战 Code 节点。
三、避坑指南:Aggregate 节点常见报错与误区
Aggregate 节点虽然好用,但也有几个坑,笔者帮大家排一排:
- “我明明聚合了,为什么下游还是触发多次?”
检查你的 Output Type。如果你选了
Array,但下游节点配置错误,或者你连接的是“Run Once”类型的触发器,有时候行为会很诡异。确保下游节点能正确接收数组输入。 - 数据量过大导致内存溢出
如果你要聚合 10 万条数据,直接用 Aggregate 节点可能会撑爆 n8n 的内存。对于大数据量,建议分页处理,或者在数据库层面直接完成聚合查询。
- 字段对齐问题
在
Into a Single Field模式下,如果你的上游数据结构不一致(有的有字段 A,有的没有),生成的 JSON 数组可能会出现空值。记得在 Aggregate 之前,用 Set 节点或者 IF 节点清洗数据,确保结构统一。
FAQ:关于 Aggregate 节点的常见疑问
Q1: Aggregate 节点和 Code 节点有什么区别?我该用哪个?
Aggregate 节点 是图形化界面操作,适合 80% 的常见场景(求和、计数、转数组/对象)。Code 节点 是写 JavaScript,适合需要复杂逻辑(比如根据特定公式计算、复杂的数组嵌套)的场景。如果你能用 Aggregate 解决,尽量用它,因为它更稳定、更易维护。
Q2: 为什么我聚合后的 JSON 传给 API 报错了?
八成是格式不对。检查 API 的文档要求。有的 API 要求 `{ "list": [...] }`,有的直接要 `[...]`。Aggregate 节点默认生成的是字段值。如果你需要外层包一层 Key,可能需要再加一个 Set 节点,或者直接用 Code 节点构造。
Q3: Aggregate 节点会改变数据的顺序吗?
一般情况下,n8n 会保持数据进入的顺序。但在 Group Mode 下,输出的顺序是按照 Group Key 排序的。如果你有严格的顺序要求,建议在聚合前加一个 Sort 节点,或者在 Code 节点里手动排序。
总结与资源
掌握了 Aggregate 节点,你就掌握了 n8n 数据流的“收口”技巧。从散乱的数据到结构化的 JSON,这一步是自动化进阶的必经之路。
如果你想深入了解更多 n8n 的硬核技巧,欢迎访问 N8N大学 (n8ndx.com)。我们不仅分享教程,更致力于帮你避坑,让自动化真正落地。下次见!