数据汇总神器:如何使用 Aggregate 节点将多条数据打包成一个 JSON 列表?

2026-01-21 12 0

还在为数据汇总头疼?Aggregate 节点才是你的救命稻草

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

数据汇总神器:如何使用 Aggregate 节点将多条数据打包成一个 JSON 列表?

这就是典型的“数据扁平化”处理不当。在 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 数组。

  1. 前置条件:你的上一个节点(比如 Google Sheets 读取或 HTTP Request)输出了多条数据。
  2. 添加节点:在上一个节点后添加 Aggregate 节点。
  3. 关键设置
    • Aggregate:选择 Into a Single Field(聚合为单个字段)。这告诉 n8n:“我要把所有数据揉成一团。”
    • Field to Aggregate:选择 Keep All Fields(保留所有字段)。或者,如果你只想保留特定字段(比如 ID),可以选 Aggregate Specific Fields
    • Output Type:这是核心!选择 Array(数组)。如果你选 Object,它会变成一个大对象,通常我们传给 API 用 Array 居多。

做完这一步,你会看到输出变成了 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 节点虽然好用,但也有几个坑,笔者帮大家排一排:

  1. “我明明聚合了,为什么下游还是触发多次?”

    检查你的 Output Type。如果你选了 Array,但下游节点配置错误,或者你连接的是“Run Once”类型的触发器,有时候行为会很诡异。确保下游节点能正确接收数组输入。

  2. 数据量过大导致内存溢出

    如果你要聚合 10 万条数据,直接用 Aggregate 节点可能会撑爆 n8n 的内存。对于大数据量,建议分页处理,或者在数据库层面直接完成聚合查询。

  3. 字段对齐问题

    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)。我们不仅分享教程,更致力于帮你避坑,让自动化真正落地。下次见!

相关文章

n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决
当n8n流程意外中断,Error Handling节点如何配置才能优雅降级?
n8n Error Handling节点和Try/Catch节点,到底该怎么选?

发布评论