还在傻傻地等数据?Merge 节点才是 n8n 的“胶水”
笔者在 N8N大学 社区里潜水时,发现很多新手同学都有一个通病:工作流跑通了,但数据总是散落在各个节点里,像一盘散沙。比如,你从 API A 拿到了用户信息,又从 API B 拿到了订单记录,想把这两者拼在一起发给下游,怎么办?

很多人下意识的反应是写 JavaScript 代码节点去拼凑,或者用复杂的 IF 逻辑去匹配。说实话,这太累了,而且极易出错。在 n8n 的世界里,有一个被严重低估的神器——Merge (合并) 节点。它就像强力胶水,能把多条并行的数据流严丝合缝地粘在一起。
今天,作为你的引路人,笔者就带你彻底搞懂 n8n 的数据合并逻辑,让你告别“数据孤岛”。
Merge 节点到底在干什么?
在 n8n 里,数据是以“包 (Item)”的形式在节点间流转的。当你的工作流分叉成两条或多条支路,分别获取数据后,这些数据流就像平行宇宙,互不干扰。Merge 节点的作用,就是打破这个平行宇宙,让它们产生交集。
简单来说,它干两件事:
1. 决定数据如何配对:是按顺序一对一,还是按 ID 匹配,或者是简单的追加?
2. 决定数据如何输出:合并后的数据包长什么样?
核心实操:三种最常见的合并姿势
打开你的 n8n 工作流,拖出一个 Merge 节点,你会看到它有几种不同的合并模式 (Merge Mode)。别慌,笔者只教你工作中最常用的三种。
姿势一:追加数据 (Append) - 最简单的堆叠
这是最无脑的用法。假设你有三个 HTTP 请求节点,分别抓取了 A、B、C 三页数据。你只想把它们连成一个长列表。
设置方法:
- 将三个请求节点的输出线都连到同一个 Merge 节点。
- 在 Merge 节点设置中,Merge Mode 选择
Append。 - Keep Matches 勾选上(通常默认就是)。
结果: 输出的数据包数量 = 三组数据之和。A 的数据包后面接 B 的,B 的后面接 C 的。非常适合做数据汇总。
姿势二:按位置合并 (Merge by Position) - 1对1 精准匹配
这个场景非常经典:你从接口 A 获取了一列用户 ID,从接口 B 获取了一列对应的 Email。现在你想把 ID 和 Email 打包发给接口 C。
设置方法:
- 把两个 HTTP 节点连到 Merge。
- Merge Mode 选择
Merge by Position。 - Combine 选择
Wait for both inputs to finish。
结果: n8n 会把两个输入流的第 1 个数据包合并,第 2 个数据包合并……以此类推。如果输入 A 有 5 条数据,输入 B 也有 5 条,输出就是 5 条合并后的数据。如果数量不一致,多出来的会被丢弃(除非开启特定选项)。
姿势三:按键合并 (Merge by Key) - 数据库般的关联
这是最强大但也最容易踩坑的模式。场景:你有一份订单数据(包含 user_id),还有一份用户详情数据(也包含 user_id)。你想把用户详情“填充”到订单数据里。
设置方法:
- 输入流 A (订单) 和 输入流 B (用户详情) 连入 Merge。
- Merge Mode 选择
Merge by Key。 - Input A Field 填入
user_id。 - Input B Field 填入
user_id。
结果: n8n 会遍历 A 的数据,根据 user_id 去 B 里找匹配项。如果找到了,就把 B 的数据字段合并进 A 的数据包里。这简直是处理 JSON 关联数据的救星!
避坑指南:90% 的人都在这里翻车
笔者在 N8N大学 带学员时,发现 Merge 节点有两个“隐形坑”,大家一定要注意:
坑点一:数据流向搞反了
在 Merge by Key 模式下,如果你的“主数据”在 Input B,而查找表在 Input A,合并后生成的数据包会带有 Input A 的结构。建议画个草图,明确谁是主数据,谁是附带数据。
坑点二:字段覆盖问题
如果你合并的两个输入流里有同名字段(比如都有name字段),Merge 节点默认会保留 Input A 的值,忽略 Input B 的值。如果你发现数据莫名其妙丢失了,检查一下是不是字段名冲突了。
Merge 节点的最佳实践场景
为了让你更有体感,笔者列举三个 N8N大学 社区里高频出现的玩法:
- 多源数据清洗: 比如你要给 100 个用户发邮件,先查数据库拿到用户列表,再查配置表拿到邮件模板 ID,用 Merge by Key 把模板 ID 注入到用户数据中,最后循环发送。
- 聚合统计: 每天定时抓取不同平台的销售数据,用 Append 模式汇总,最后推送到飞书群。
- 异步任务等待: 左边跑一个耗时的 AI 生成任务,右边跑一个数据库查询任务,用 Wait for both inputs to finish 确保两边都完成了,再进入下一步。
FAQ 问答
1. Merge 节点和 Aggregate 节点有什么区别?
简单说,Merge 是“拼积木”,把数据包横向拼接,保持数据条数不变(或变化);Aggregate 是“做统计”,它会把多条数据压缩成一条(比如求和、拼接字符串),数据条数会减少。如果你需要保留每一条原始数据,用 Merge。
2. 为什么我的 Merge 节点输出的数据包数量是 0?
通常是因为输入流的数据包数量不匹配,且你选择了 Merge by Position。如果 Input A 有数据,Input B 是空的,合并结果可能就是空。检查你的上游节点是否真的输出了数据。
3. 可以合并超过两条数据流吗?
当然可以!n8n 的节点输入端口是动态的,你可以把鼠标悬停在输入端口,点击“+”号,添加任意多条数据流进行合并。
总结与资源
Merge 节点是 n8n 工作流设计的“分水岭”。掌握了它,你才算真正从“写死数据”的阶段,进化到了“动态处理数据”的阶段。
建议大家去 N8N大学 (n8ndx.com) 找几个实战案例,亲手拖拽一下 Merge 节点,感受数据包碰撞的火花。如果你在合并数据时遇到了具体的报错,欢迎在社区发帖,笔者会第一时间帮你排查。