大家好,我是翔宇,专注于 AI 与自动化。欢迎来到「翔宇工作流」频道!在这里,我会用最通俗易懂的方式,帮你搞定各种自动化场景。
今天要带大家深入了解 n8n 的数据处理利器——Combine Items 功能下的三大核心节点:
- Aggregate(聚合)
- Merge(合并)
- Summarize(汇总)
无论是自动回复邮件、社交媒体管理,还是数据库同步,只要你灵活运用这三大节点,就能让工作流效率瞬间飙升!
当然,由于翔宇的实践经验有一定局限性,本教程可能存在一些疏漏或不准确之处。恳请各位读者理解,也欢迎指正和补充,以便共同进步。
接下来的教程里,我会:
- 逐一讲解每个节点的作用与典型应用场景
- 详解设置界面中的各项配置含义与最佳实践
- 对比它们的原理和使用时机,教你如何避免常见误区
- 零代码基础也没关系,一步步手把手带你掌握。准备好了吗?跟着我一起,解锁 n8n 数据处理的全新能力吧!
n8n 基础快速回顾
在深入了解这三个节点前,咱们先快速过一下 n8n 的基本概念,这样后面学起来更轻松。
- 节点 (Node): 想象成搭积木,每个节点就是一块积木,代表一个具体操作。比如“读邮件”是一块,“发 Slack 消息”是另一块。咱们要学的 Aggregate, Merge, Summarize 也是节点,它们是 n8n 自带的核心节点,用来做通用的数据处理。
- 工作流 (Workflow): 就是你用好多节点搭起来的一个自动化流程。数据会像水一样,从一个节点流到下一个节点,一步步被处理。
- Item (项目): 在 n8n 里,数据是以 “Item” 的形式流动的。你可以把一个 Item 看作一条记录,比如一封邮件、一个客户信息、一条订单。一个节点通常会处理一批 Items。理解 Item 很重要,因为咱们要学的三个节点都是跟处理 Items 打交道的。
- 小提示: 在 n8n 内部,数据通常是这样的一串东西:
[{ "json": { ...数据1... } }, { "json": { ...数据2... } }]
。每个{ "json": {...} }
就是一个 Item。你暂时不用管代码细节,知道数据是一条条来的就行。
- 小提示: 在 n8n 内部,数据通常是这样的一串东西:
- 触发节点 (Trigger Node): 每个工作流都要有个“开关”,这就是触发节点。它负责启动流程,比如“每小时跑一次”、“收到新邮件时启动”等等。
- 动作节点 (Action Node): “开关”后面的节点基本都是动作节点,它们干具体的活儿,比如拿数据、处理数据、发数据。Aggregate, Merge, Summarize 都属于动作节点。
- 连接线 (Connection): 就是连着节点的线,告诉数据该往哪走。
了解了这些,咱们就可以自信地去认识 Aggregate, Merge 和 Summarize 这三个强大的节点了!
深入了解 Aggregate 节点:数据收集器
节点简介:它是干嘛的?
核心功能: Aggregate 节点的作用很简单,就是把 很多个输入 Item 里面,你 指定字段 的值,全都 收集 起来,放到 一个输出 Item 里的一个 列表(数组) 里。
- 打个比方: 你有很多水果篮(输入的 Items),每个篮子里有苹果、香蕉、梨(字段)。你想把所有篮子里的“苹果”(指定字段)都挑出来,放进一个大篮子(输出 Item)里,形成一个“苹果列表”。Aggregate 就是干这个“挑苹果”的活儿。它只关心你指定的那个字段。
典型应用场景:什么时候用它?
- 收集 ID 列表: 从一堆客户信息里,把所有客户 ID 提出来放一起,方便后面批量查数据库或调用 API。
- 汇总名单: 从一堆联系人里,把所有名字或邮箱收集起来,生成一个名单。
- 准备循环数据: 有时候你需要对一组特定的值进行循环处理,可以先用 Aggregate 把它们收集起来。(虽然 n8n 很多节点能自动循环)
- 合并分散信息: 如果某个信息(比如一个订单里的所有商品编号)分散在好几个 Item 里,可以用 Aggregate 把它们收进一个列表。
- 实例: 处理分页数据(比如爬虫翻页)或者循环操作后,把每次得到的部分结果(比如 AI 分析的关键词)重新聚合到一个 Item 里,方便最后统一处理或发送。
详细使用方法
- 添加节点: 在工作流画布上点
+
号,搜索 “Aggregate”,添加它 - 连接输入: 把前面输出多个 Items 的节点连到 Aggregate 的输入端。
- 配置节点 (关键步骤):
- 告诉它你要收集 哪个字段 (
Input Field Name
)。 - 给收集好的列表起个名字 (
Output Field Name
)。 - 选择聚合模式 (
Individual Fields
最常用)。
- 告诉它你要收集 哪个字段 (
- 测试: 点节点上的 “Test step”,看看输出是不是只有一个 Item,并且里面有个列表,装着你想要收集的所有值。
示例: 假设上游节点输出了 3 个代表用户的 Item:
输入数据 (Input):[ { “json”: { “id”: 1, “name”: “Alice”, “city”: “New York” } }, { “json”: { “id”: 2, “name”: “Bob”, “city”: “London” } }, { “json”: { “id”: 3, “name”: “Charlie”, “city”: “New York” } } ]
- 目标: 收集所有用户的
name
到一个列表里。 - 配置:
Aggregate
: Individual FieldsInput Field Name
:name
- (推荐) 打开
Rename Field
开关 Output Field Name
:user_names
- 测试输出 (Output):
[ { "json": { "user_names": [ "Alice", "Bob", "Charlie" ] } } ]
看!输出只有一个 Item,里面有个叫user_names
的列表,包含了所有输入 Item 的name
值。
节点设置详解
Aggregate
(聚合模式):Individual Fields
(聚合指定字段): 最常用。Input Field Name
: 输入你想收集值的字段名,比如name
,email
。想收集嵌套字段(如user.address.city
)?直接用点.
就行 (除非你关了Disable Dot Notation
)。Rename Field
: 默认关。强烈建议打开,然后给你的列表起个好名字 (Output Field Name
)。如果要同时收集多个字段,必须给每个字段都打开这个并起不同的名字。Output Field Name
: 给收集好的列表起个名,比如collected_ids
,all_names
。- (点 “Add Field” 添加更多): 可以同时收集好几个不同字段的值,每个都会生成一个列表。
All Item Data
(聚合所有项目数据): 把每个输入 Item 的全部或部分数据作为一个整体,收集到一个列表里。Put Output in Field
: 指定包含所有 Item 数据列表的那个字段叫啥名。Include
: 控制每个 Item 的哪些字段要被包含进来 (All fields / Specified Fields / All Fields Except)。
Options
(选项):Disable Dot Notation
: (仅限 Individual Fields) 默认关。推荐保持关闭,这样才能方便地用.
访问嵌套字段。Merge Lists
: (仅限 Individual Fields) 默认关。如果你要收集的字段本身就是个列表(比如商品的tags
),你想把所有这些小列表 合并成一个大平铺列表,而不是一个装着好几个列表的列表(列表的列表),那就打开它。- 例子: 输入
[{ "json": { "tags": ["A", "B"] } }, { "json": { "tags": ["C"] } }]
, 收集tags
。 Merge Lists
关 (默认): 输出[["A", "B"], ["C"]]
(列表的列表)。Merge Lists
开: 输出["A", "B", "C"]
(平铺列表)。- 推荐: 看你下一步需要啥格式。如果需要平铺列表,就打开。
- 例子: 输入
Include Binaries
: (两种模式都有) 默认关。如果输入 Item 里有文件之类的二进制数据,你想保留它们,就打开。注意: 会增加内存消耗,只在需要时打开。Keep Missing And Null Values
: (仅限 Individual Fields) 默认关。如果某个 Item 缺了你要收集的字段,或者值是null
:- 关 (默认): 直接忽略这个 Item 的这个字段。
- 开: 会在输出列表的对应位置加一个
null
值。 - 推荐: 大多数情况保持关闭。只有当你需要输出列表长度严格等于输入 Item 数量,并用
null
标记缺失时才打开。
常见错误与解决方法
- 错误:没输出,或者输出里没有我要的列表。
- 原因: 上游没数据?
Input Field Name
写错了?Output Field Name
没填? - 解决: 检查上游输出;仔细核对字段名;确保设置了输出字段名。
- 原因: 上游没数据?
- 问题:收集嵌套字段 (如
user.id
) 失败。- 原因: 可能不小心打开了
Disable Dot Notation
。 - 解决: 关掉
Disable Dot Notation
。
- 原因: 可能不小心打开了
- 问题:收集列表字段,结果是列表的列表,不是平铺的。
- 原因: 没打开
Merge Lists
。 - 解决: 打开
Merge Lists
。
- 原因: 没打开
- 问题:输出列表里少了值,或者多了
null
。- 原因: 检查
Keep Missing And Null Values
设置;检查输入数据本身。 - 解决: 调整设置;检查数据源。
- 原因: 检查
- 问题:在循环 (Loop) 里用 Aggregate,好像只收集了最后一次循环的数据?
- 原因: 你可能把 Aggregate 放错地方了。如果放在循环 里面,它通常只处理当前这次循环的数据。
- 理解: 循环节点(如 Loop Over Items)通常会在所有次循环结束后,把 所有 次的结果集合起来,从 “Done” 出口一次性传出去。
- 解决: 如果你想收集 所有 循环的结果,应该把 Aggregate 节点连到循环节点的 “Done” 输出端口。
- 问题:自动运行时没去掉
null
,但手动测试时去掉了? (曾有社区报告类似问题)- 原因: 可能是特定版本的小问题或行为不一致。
- 解决/规避:
- 方法1: 在 Aggregate 后面 加个 Code 节点,用几行代码手动过滤
null
。 - 方法2: 确保 n8n 是最新版,可能已经修复了。如果还不行,可以去社区问问。
- 方法1: 在 Aggregate 后面 加个 Code 节点,用几行代码手动过滤
节点用途总结:何时选 Aggregate?
核心场景: 当你需要把分散在 多个 Item 里的 同一种信息(某个字段的值)收集 起来,变成 一个列表,放在 一个 Item 里,方便后续统一处理时。
关键特征: 输入是多个 Item,输出 永远只有一个 Item。这个输出 Item 的价值就在于那个列表。它不计算,就是 收集。
深入了解 Merge 节点:数据流交汇点
节点简介:它是干嘛的?
核心功能: Merge 节点用来把来自 两个或多个不同来源 (输入) 的 Items,按照你选的规则 (模式 Mode),合并或组合 成新的输出流。
- 打个比方: 想象一个十字路口,有东、西、南、北来的车(多个输入流的数据 Items)。Merge 节点就是路口的交警。它可以让所有车按顺序排队通过 (
Append
模式);也可以让东西向的车根据车牌号(匹配字段)配对后一起走 (Combine by Matching Fields
模式);或者按先来后到的顺序两两配对 (Combine by Position
模式)。它的核心任务是 协调不同来源的数据如何汇合。 - 重要提示: Merge 节点在新版本 (0.194.0+) 有较大改进。本教程基于新版本。
典型应用场景:什么时候用它?
- 合并 IF/Switch 分支: 如果你的流程用了 IF 或 Switch 节点分叉了,通常需要用 Merge 把不同分支处理完的结果重新合到一起。
- 数据丰富: 把一个数据源(比如订单列表)和另一个数据源(比如客户信息)根据共同字段(如
customer_id
)匹配起来,给订单加上客户详情。这就像数据库里的 JOIN 操作。 - 同步数据: 比较两个系统的数据,用 Merge 匹配记录,找出差异或合并更新。
- 组合不同来源数据: 从两个不同的 API 拿到数据后,把它们合并成一个数据集。
- 等待多个并行任务: Merge 会等所有连到它输入的流都跑完,才开始合并。
- 社区实例: 合并两个不同来源的数据,通过共同的 Key 匹配。
详细使用方法
- 添加节点: 在工作流画布上点
+
号,搜索 “Merge”,添加它。 - 连接输入: 把 至少两个 需要合并的上游节点或分支,连到 Merge 节点的 不同输入端 (Input 1, Input 2, …)。
- 配置节点 (关键步骤):
- 选择合适的 模式 (Mode)。
- 根据模式设置相应的选项 (比如按什么字段合并)。
- 测试: Merge 依赖多个输入,测试前最好确保所有上游都跑过了(或者用 Pin 功能固定上游数据)。然后点 “Test step” 看结果。
示例 (数据丰富):
- 输入数据 1 (Input 1 – 来自 Code 节点 1): 人员列表
[ { "json": { "name": "Max", "language": "en" } }, { "json": { "name": "Friedrich", "language": "de" } } ]
- 输入数据 2 (Input 2 – 来自 Code 节点 2): 问候语列表
[ { "json": { "greeting": "Hello", "language": "en" } }, { "json": { "greeting": "Hallo", "language": "de" } } ]
- 目标: 根据
language
字段,把正确的问候语greeting
合并到每个人员信息里。 - 配置:
Mode
: CombineCombine By
: Matching FieldsInput 1 Field
:language
Input 2 Field
:language
- 测试输出 (Output):
[ { "json": { "name": "Max", "language": "en", "greeting": "Hello" } }, { "json": { "name": "Friedrich", "language": "de", "greeting": "Hallo" } } ]
成功!通过匹配language
,数据合并了。
节点设置详解 (推荐配置)
Mode
(模式): 决定 Merge 怎么干活。Append
(追加):- 作用: 把所有输入流的 Items 按顺序 一个接一个叠起来,形成一个更长的输出流。不匹配,不组合,就是堆叠。
- 行为: 等所有输入都完成后再执行。
Number of Inputs
: 你要连几个输入就填几。- 推荐场景: 合并 IF/Switch 分支结果,且分支间数据不需要关联,只是想让流程汇合。
- 注意: 输出的 Item 还是“各回各家”,只带着自己来源的数据。如果后面节点想用一个只在某个分支里才有的字段,可能会报错!
Combine
(组合):- 作用: 把来自 两个输入 (Input 1, Input 2) 的 Items 配对组合。
Combine By
(组合方式):Matching Fields
(按字段匹配):- 指定 Input 1 和 Input 2 里哪个字段用来 配对 (
Input 1 Field
,Input 2 Field
)。值相同的 Item 会被合并。 - 最常用,用于数据丰富 (像 SQL JOIN)。
- 想匹配嵌套字段?直接写
data.id
这种。
- 指定 Input 1 和 Input 2 里哪个字段用来 配对 (
Position
(按位置匹配):- Input 1 的第 1 个 Item 配 Input 2 的第 1 个,第 2 个配第 2 个… 以此类推。
- 适用于两个数据流顺序严格对应的情况。
- 数量不一致时,默认丢弃没配上对的。
All Possible Combinations
(所有可能组合):- Input 1 的每个 Item,都和 Input 2 的 所有 Item 组合一次。输出 M * N 个 Item。
- 慎用,可能产生超多数据。
- 推荐场景: 数据丰富、按 ID 合并信息、按顺序合并。
Choose Branch
(选择分支):- 作用: 比较特殊。根据条件(比如谁先到,或根据数据内容)只选一个 输入流的数据作为输出,其他流可以等待或忽略。
Use output from branch
: 选哪个输入的数据往下传。Wait for other branches
: 是否等其他输入跑完。- 推荐场景: 处理竞争情况(比如两个 API 抢资源,谁快用谁的),或者需要精确控制流程走向。
Options
(选项 – 主要用于 Combine 模式):Clash Handling
(冲突处理): Input 1 和 Input 2 要合并的 Item 里有同名字段咋办?Keep Key from Input 1
: 用 Input 1 的值。Keep Key from Input 2
: 用 Input 2 的值。Rename Key from Input 2
: 给 Input 2 的重名字段加个后缀。Merge Objects/Arrays
: 尝试深度合并对象或数组。- 推荐: 看情况。如果 Input 1 是主要数据,选
Keep Key from Input 1
通常比较稳。
Fuzzy Compare
(模糊比较): (用于 Matching Fields) 默认关。打开后,比较字段时会忽略类型差异,比如数字3
和字符串"3"
算相等。推荐: 只在你知道类型可能不同但逻辑上该相等时才开。Disable Dot Notation
: 默认关。推荐保持关闭,方便用.
访问嵌套字段。Multiple Matches
(多重匹配): (用于 Matching Fields) Input 1 的一个 Item 匹配到 Input 2 的多个咋办?Include All Matches
: 每个匹配都生成一个输出 Item (一对多)。Include First Match Only
: 只保留第一个匹配 (默认,一对一)。- 推荐: 看你需要一对一还是一对多。
Include Any Unpaired Items
(包含未配对项): (用于 Position 模式) 默认关。数量不一致时,打开会保留没配上对的 Item。推荐: 看你需不需要保留没配对的数据。
常见错误与解决方法
- 错误:Merge 节点不运行,或者一直转圈圈 (等待状态)。
- 原因: Merge 会等 所有 连接的输入都跑完。如果有一个输入出错了、或者因为 IF 条件没跑、或者跑太久没结束,Merge 就不会开始。
- 解决: 检查所有连到 Merge 的上游分支,确保它们都能正常结束并输出数据(或者确定它们就是不该输出)。
- 问题:Merge 好像触发了不该跑的分支? (比如 IF 为 True,但 False 分支也被 Merge 跑了)
- 理解: 这是 Merge (尤其旧版) 一个有点怪但有时是“设计如此”的行为。当一个分支的数据到了 Merge,它为了能最终合并,可能会去“拉”其他还没到的分支的数据,这可能导致本不该跑的节点(如 IF 的 False 分支)意外执行。
- 解决/规避:
- 更新 n8n: 新版本 n8n 在改进执行逻辑。确保你的 n8n 最新。
- 调整流程: 尽量避免 Merge 直接连到可能不执行的分支。考虑更线性的流程。
- 用 Choose Branch 模式: 有时这个模式能更精确控制。
- 错误:合并后的数据在后面节点用不了,报错 “Missing pairedItem data”。
- 原因: 通常是用
Append
模式惹的祸。Append 输出的 Item 还是“各管各的”。如果后面节点想用只在 Input 2 里有的字段,但当前处理的 Item 来自 Input 1,就报错了。你可能误以为 Append 会把字段合并到一起。 - 解决:
- 用 Combine 模式: 如果你想把字段合并到 同一个 Item 里,应该用
Combine
模式 (通常是 Matching Fields 或 Position)。 - 小心访问: 如果必须用 Append,后面节点访问字段时要考虑它可能不存在(比如用 IF 判断)。
- 用 Combine 模式: 如果你想把字段合并到 同一个 Item 里,应该用
- 原因: 通常是用
- 问题:用 Merge (Append 模式) 合并多个 (>2个) 输入,只输出了第一个? (曾在旧版报告)
- 原因: 可能是旧版 Bug。
- 解决: 更新 n8n 到最新版。
- 问题:手动测试 (Test Step) 时 Merge 没输出,或者只输出一个输入的,但完整运行 (Test Workflow) 就正常?
- 原因: 单步测试时,n8n 可能没法模拟所有上游分支都跑完的情况,特别是有些分支可能因 IF 条件没数据。
- 解决:
- Pin Data (固定数据): 在 Merge 的上游节点跑完后,点 “Pin Data” 把它们的输出固定住。这样测试 Merge 就有数据用了。
- 测完整工作流: 对于复杂分支合并,用 “Test Workflow” 更靠谱。
- 问题:用 Merge (SQL Query 模式) 测试结果不对? (此模式较少用且文档少)
- 原因: 可能有 Bug 或与测试机制交互不好。
- 解决/建议:
- 新手慎用: 优先用标准模式 (Append, Combine)。
- 求助社区: 如果非用不可,去社区带上详细步骤和例子问问。
- 问题:Merge (Combine by Position) 没按预期工作,只输出了 Input 1 的数据?
- 原因: 节点没激活?(颜色变浅,标着 Deactivated)输入数据有问题?
- 解决: 确认节点已激活;检查输入数据;想想 Position 是不是你真想要的模式。
节点用途总结:何时选 Merge?
核心场景: 当你的工作流产生了 多个独立的数据来源 或 处理分支,你需要根据 某种逻辑关系 (共用 ID、按位置对应、或只是简单追加) 把它们的 Items 汇合 或 组合 起来时。
关键特征: 处理 多个输入流;提供 多种合并策略;通常会 等待所有输入完成。输出 Item 数量和结构看模式和数据。它专注于 连接 和 组合 不同路径的数据。
深入了解 Summarize 节点:数据汇总大师
节点简介:它是干嘛的?
核心功能: Summarize 节点的核心作用是对输入的多个 Item 进行 分组 (Group By),然后对 每个分组内 的 指定字段 执行 聚合计算 (比如算总和 Sum, 计个数 Count, 求平均值 Average, 找最大/最小值 Max/Min, 或者把值收集到列表 Append)。
- 打个比方: Summarize 特别像 Excel 里的 “数据透视表 (Pivot Table)”。你告诉它:“我想按‘部门’(分组字段)来统计每个部门的‘销售额’(聚合字段)的‘总和’(聚合操作)”。然后它就给你一份报告(输出 Items),列出每个部门和对应的总销售额。
- 重要区分: n8n 里有两个带 “Summarize” 的节点!咱们说的是 核心的 Summarize 节点,用来 分组统计数据 的。不是 那个用来总结文章内容的 AI 节点(那个通常叫 Summarization Chain 之类的)。
典型应用场景:什么时候用它?
- 生成统计报告: 算每个销售区的总销售额、平均订单价、客户数等。
- 分类计数: 统计网站日志里,每种浏览器访问了多少次;或者像社区例子那样,统计不同推荐结果(”DENY”, “CHALLENGE”)各有多少个。
- 数据透视: 把流水账数据(每个 Item 是一笔交易)变成按月或按产品汇总的报告。
- 按用户聚合信息: 按用户 ID 分组,用
append
操作把每个用户的所有订单号收到一个列表里(类似 Aggregate,但在分组内做)。 - 社区实例: 读 Excel 数据,按某个 ID 分组统计,结果存数据库。
详细使用方法
- 添加节点: 在工作流画布上点
+
号,搜索 “Summarize”,添加它。 - 连接输入: 把包含要汇总数据的上游节点连到 Summarize 的输入端。
- 配置节点 (核心步骤):
- 指定按 哪个字段分组 (
Fields to Split By
)。 - 设置要做的 聚合计算 (
Fields to Summarize
):选操作 (Aggregation
)、指定对哪个字段操作 (Field
)、(推荐) 给结果起个名 (Output Field Name
)。
- 指定按 哪个字段分组 (
- 测试: 点 “Test step”,看输出结果。通常会得到多个 Item,每个代表一个分组的汇总结果。
示例 (分类计数):
- 输入数据 (Input):
[ { "json": { "user": "user1", "recommendation": "DENY" } }, { "json": { "user": "user2", "recommendation": "DENY" } }, { "json": { "user": "user3", "recommendation": "CHALLENGE" } } ]
- 目标: 统计每种
recommendation
出现了多少次。 - 配置:
Fields to Split By
:recommendation
Fields to Summarize
: (点 “Add Aggregation”)Aggregation
:count
Field
:recommendation
(或user
,对 count 操作,字段存在就行)Output Field Name
:count_recommendation
(推荐起个清晰的名字)
- 测试输出 (Output – 默认格式):
[ { "json": { "recommendation": "DENY", "count_recommendation": 2 } }, { "json": { "recommendation": "CHALLENGE", "count_recommendation": 1 } } ]
输出是两个 Item,代表 “DENY” 组和 “CHALLENGE” 组的计数结果。 - 格式转换提示: Summarize 默认输出上面这种格式。如果你想要
{ "DENY": 2, "CHALLENGE": 1 }
这种键值对格式,需要在 Summarize 后面 加个 Code 节点,用代码转换一下。这说明 Code 节点在处理特定格式时很灵活。
节点设置详解
Fields to Split By
(分组依据字段):- 作用: 指定按哪个 (或哪些,用逗号隔开) 字段来 分组。所有在这个字段上值完全一样的 Item 会被归为一组。
- 关键: 这是实现“Group By”的核心。如果 留空,所有 Item 算一大组,只输出一个汇总结果。
- 注意: 如果字段值是像
"0123"
这种看起来像数字的字符串,节点可能会把它当数字处理,丢掉前面的0
(后面会说)。
Fields to Summarize
(要汇总的字段):- 作用: 定义你要对每个分组做哪些 计算。可以点 “Add Aggregation” 添加多个计算。
- 对每个计算项设置:
Aggregation
(聚合操作): 选计算类型。常用有:sum
: 求和 (字段需为数字)。count
: 计数 (分组内 Item 数量)。average
: 平均值 (字段需为数字)。min
: 最小值。max
: 最大值。first
: 取分组里第一个 Item 的字段值。last
: 取分组里最后一个 Item 的字段值。append
: 把分组内所有 Item 的该字段值 收集到列表 (类似 Aggregate,但在组内做)。merge
: 合并 JSON 对象。
Field
: 指定对 哪个字段 进行上面的操作。比如选sum
,这里就填包含数字的字段名。选count
,填任意存在的字段都行。Output Field Name
: (可选但 强烈推荐) 给计算结果起个名字,在输出 Item 里用。比如total_sales
。不填会自动生成 (如sum_sales_amount
),有时不直观还可能变。最佳实践:永远手动命名!Include Empty
: (可能在 append 等操作中有) 是否包含null
或空字符串。默认通常不包含。
Options
(选项):Disable Dot Notation
: 默认关。推荐保持关闭,方便用.
访问嵌套字段。Output Format
:Each Split in a Separate Item
(默认): 最常用。每个分组的汇总结果是一个单独的 Item 输出。分了 5 组就输出 5 个 Item。All Splits in a Single Item
: 只输出一个 Item,里面包含一个列表,列表里才是每个分组的结果。不常用。
常见错误与解决方法
- 错误:计算结果不对 (Sum 是 0? Count 错了?)
- 原因: 字段名写错了?对文字做了数学计算 (如 sum)?输入数据有
null
或格式不对?分组 (Fields to Split By
) 设错了? - 解决: 仔细核对字段名;确保数学计算的字段是数字类型(必要时前面加 Set/Code 节点转类型);检查上游数据;检查分组逻辑。
- 原因: 字段名写错了?对文字做了数学计算 (如 sum)?输入数据有
- 问题:分组字段 (
Fields to Split By
) 是"0123"
这种字符串,输出变成数字123
,前面的0
没了!- 现象: 这是 Summarize 处理分组字段的一个 已知限制。如果值看起来像数字,它就可能按数字输出,导致格式变化(丢前导零最常见)。
- 解决/规避:
- 目前没直接选项: 节点本身没提供强制保留字符串格式的选项。
- 方法1 (预处理): 在 Summarize 前面 加 Set 或 Code 节点,给这个字段值加个前缀 (如
"0123"
->"ID_0123"
),这样它就不像纯数字了。Summarize 之后 再去掉前缀(如果需要)。 - 方法2 (Code 节点替代): 最稳妥的方法是用 Code 节点自己写分组统计逻辑,这样能完全控制格式和类型。
- 关注更新: 社区提过这问题,n8n 可能未来会改进。保持更新。
- 问题:聚合字段用了点 (
params.interval
),自动生成的输出名appended_params_interval
变成了appended_paramsinterval
(下划线没了)? (曾在旧版报告)- 现象: 旧版的一个 Bug。自动生成的名称没处理好点符号。
- 解决:
- 最佳实践 (推荐): 始终手动指定
Output Field Name
! 不依赖自动生成,代码更清晰、稳定。 - 更新 n8n: 更新到新版应该修复了此 Bug (但还是推荐手动命名)。
- 最佳实践 (推荐): 始终手动指定
- 问题:Summarize 输出格式不是我想要的,比如要
{ "分组值": 结果 }
这种对象。- 原因: Summarize 标准输出格式是固定的 Item 列表。
- 解决: 在 Summarize 后面 加个 Code 节点。用代码遍历 Summarize 的输出,自己组装成想要的格式。
节点用途总结:何时选 Summarize?
核心场景: 当你需要像用 Excel 做分析一样,对一堆数据(Items)根据某些 类别(分组字段)进行 分类归组,并对 每个组 分别进行 统计计算(求和、计数、平均值、找最值、收列表等)时。
关键特征: 输入多个 Item,输出通常也是多个 Item (每个代表一组的统计结果)。核心操作是 分组 (Split By) 和 聚合计算 (Summarize)。目的是产生数据的 统计视图。
功能对比:Aggregate vs Merge vs Summarize
我们已经分别了解了这三个节点,现在把它们放一起比一比,帮你搞清楚它们的不同,做出正确选择。
核心原理差异:
- Aggregate (聚合): 像个 收集员。遍历所有来的包裹 (Items),只拿出你指定的同一样东西 (字段值),放进一个大容器 (输出 Item 的列表) 里。它不管包裹间的关系,只负责 收集,最后交出一个收集品列表。
- Merge (合并): 像个 交通枢纽调度员。处理来自不同道路 (输入流) 的车辆 (Items)。根据规则(对车牌号?按顺序配对?排队通过?)指挥车辆 汇合、配对或排序。它关心的是如何处理 不同来源 数据流的关系。
- Summarize (汇总): 像个 数据分析师。拿到一堆原始记录 (Items),先按标准 分类 (分组),然后对每个类别进行 量化分析 (算总数、平均值等),最后提交一份分类 统计报告 (输出 Items)。
输入与输出对比:
- 输入: Aggregate 和 Summarize 通常处理来自 单一 源头的多个 Item。Merge 天生用来处理来自 两个或多个 不同源头的数据流。
- 输出:
- Aggregate 永远只输出一个 Item,里面装着收集好的列表。
- Merge 输出的 Item 数量和结构 看模式和数据 (Append 输出总和数量,Combine 输出匹配/组合结果)。
- Summarize 通常输出 多个 Item,每个 Item 是一组的统计结果 (除非你不分组)。
应用场景辨析:
- 选 Aggregate 当你: 想把散落在多个 Item 里的 同一种信息 (所有 ID、所有名字) 收集 成 一个列表,放进 一个 Item 里,用于后续批量操作或循环。本质是 打包 同类信息。
- 选 Merge 当你: 需要把来自 不同源头 或 不同处理路径 (IF/Switch 分支) 的数据,根据 某种关联 (共用 ID、顺序对应) 进行 连接、配对或合并。比如用客户信息补充订单,或把分支结果合流。本质是 对接 不同来源的数据。
- 选 Summarize 当你: 需要对一批数据 分类统计,计算每个类别的 总和、数量、平均值 等指标,像做数据报告或透视表。比如按月统计销售额。本质是 分析 和 提炼 数据的统计特征。
关键限制与选择考量:
- Aggregate 限制: 输出只有一个 Item,丢失了大部分原始结构。不做计算。
- Merge 限制: 逻辑较复杂,尤其 Combine 模式选项多。结合 IF/Switch 时可能出现反直觉执行(主动拉取)。Append 模式可能导致后续字段访问出错。SQL Query 模式文档少且可能不稳。测试可能需要 Pin Data。
- Summarize 限制: 主要做分组统计,复杂逻辑不如 Code 节点灵活。可能错误地将数字字符串转为数字(丢前导零)。旧版曾有自动命名 Bug。输出格式固定,特殊格式需配合 Code 节点。
选择时思考:
- 最终想要一个 列表 吗? -> 可能选 Aggregate。
- 需要 连接/组合 来自 不同流/分支 的数据吗? -> 可能选 Merge。
- 需要 分组 并计算 统计值 (总和/数量/平均值) 吗? -> 可能选 Summarize。
- 逻辑 很复杂 或要 精确控制格式/类型 吗? -> 考虑 Code 节点 或组合节点。
- 在处理 IF/Switch 分支 吗? -> 用 Merge 要 特别小心 其执行逻辑,或更新 n8n。
- 关心 分组字段 的原始格式 (如带前导零的编号) 吗? -> 用 Summarize 注意类型转换限制,必要时用 Code 或预处理。
理解这些差异,你就能更自信地为你的 n8n 工作流选择最合适的节点了!
总结与后续学习
回顾: 我们一起学习了 n8n 中三个核心数据处理节点:
- Aggregate: 收集特定值到列表。
- Merge: 连接不同来源的 Items。
- Summarize: 分组并进行统计计算。
掌握它们是用好 n8n 的关键一步。
强调实践: 理论懂了,更要动手试!强烈建议你打开 n8n,用教程里的例子或者你自己的数据,亲自配置、测试这三个节点。观察输入输出的变化,甚至故意搞点小错误看看会怎样。记住,单步测试 (“Test Step”) 和完整流程测试 (“Test Workflow”) 有时结果可能不一样,特别是对 Merge 这种多输入的节点。
超越基础: 这三个节点是基石,但 n8n 的能力远不止于此。遇到它们搞不定的复杂需求时,别忘了 Code 节点!它让你能用 JavaScript (或 Python) 写代码,实现几乎任何逻辑,是解决特殊场景的“万能钥匙”。此外,还有像 Item Lists 节点 (包含拆分列表、排序、去重等操作) 和 Compare Datasets 节点 (提供另一种强大的比较合并数据集的方式) 也非常有用。
鼓励探索: 掌握了这三个核心节点,你就有了处理 n8n 数据流的基础。以此为起点,大胆探索更复杂的应用,尝试把它们和 n8n 成百上千的其他节点组合起来,你会发现 n8n 的无限潜力!
翔宇希望今天的教程能够帮助各位小伙伴设计出令人惊叹的工作流!