场景导入:别让数据孤岛拖垮你的自动化
作为一名在低代码领域摸爬滚打多年的“老司机”,笔者见过太多人把 n8n 玩成了高级的“复制粘贴工具”。最典型的场景就是:你从 API A 拉取了订单数据,又从数据库 B 拉取了用户信息,想把它们拼在一起做个营销邮件?如果不懂 n8n 的合并逻辑,你大概率会陷入手动循环、数据错位甚至死循环的泥潭。
这不仅效率低下,更是 n8n 的使用误区。N8N大学 的使命就是帮你从“能用”进阶到“精通”。今天,我们就来深度拆解 n8n 中最强大但也最容易让人迷糊的节点之一:Merge(合并)节点。掌握它,你才能真正驾驭多流数据,让你的自动化工作流拥有“大脑”。
核心实操:Merge节点的四大合并策略
Merge 节点本质上是一个数据的“十字路口”,它负责决定两股或多股数据流何时相遇、如何结合。在 n8n 中,通常用于合并来自两个不同节点(如两个 HTTP Request 或一个 HTTP Request 加一个 Spreadsheet File 节点)的数据。
在使用前,请确保你已经配置好两条输入数据流,并将它们都连接到同一个 Merge 节点上。现在,让我们逐一拆解它的核心模式。
1. 合并模式:Append(追加)
这是最简单的模式,也是新手最容易理解的。它的逻辑是:把“输入1”的数据和“输入2”的数据直接拼接起来,形成一个更长的列表。
适用场景: 收集来自不同来源的同类数据。例如,上午从服务器 A 导出的错误日志,和下午从服务器 B 导出的错误日志,你需要把它们汇总到一个 Excel 表格里。
关键参数: 在 Mode 选择 Append 后,你通常不需要勾选 "Keep Missing Sets"(除非你特别关心数据完整性)。输出结果将是一个包含所有输入对象的单一数组。
2. 合并模式:Merge(按字段匹配)
这是最常用的“横向合并”模式,类似于 SQL 中的 JOIN 操作。它的逻辑是:根据两个输入中相同的字段值,将数据“缝合”在一起。
适用场景: 订单数据(含有 user_id)与用户数据(含有 user_id)的匹配。你想给每个订单补充上用户的邮箱地址。
关键参数:
- Mode:选择 Merge。
- Join Keys:这是核心!你需要指定两个输入中用于匹配的字段。例如,Input 1 选
user_id,Input 2 也选user_id。 - Join Type:
- Left:以第一条输入为主,只有匹配成功的才合并(类似 Excel VLOOKUP)。
- Inner:两边都必须有数据才能输出(过滤掉没有匹配项的数据)。
笔者建议新手先从 Left Join 练手,这样能保证主数据流不丢失。
3. 合并模式:Wait for All(等待所有)
这个模式非常特殊,它不是为了合并数据内容,而是为了合并“时间点”。它会暂停工作流,直到所有连接的输入分支都至少产生了一条数据,才会继续向下执行。
适用场景: 异步任务的协调。比如,你同时发起了 3 个 API 请求(获取产品库存、价格、评价),你需要等这 3 个请求全部返回结果后,才能进行下一步的“生成综合报告”操作。
避坑指南: 如果某个输入分支长时间没有数据,整个工作流就会卡死在这里。因此,使用此模式时,务必确保上游节点的数据是确定的,或者设置了超时机制。
4. 合并模式:Multiplex(多路复用)
这个模式比较硬核,它的作用是将一条输入数据与另一条输入数据的每一个条目进行配对。
适用场景: 批量操作。例如,Input 1 是一个包含 10 个用户 ID 的数组,Input 2 是一个包含通用模板的单条数据。你想用这同一个模板给 10 个用户发送消息。
关键参数: 选择 Multiplex 后,n8n 会将 Input 1 的每个元素与 Input 2 的每个元素组合。如果 Input 1 有 10 条,Input 2 有 1 条,输出就是 10 条组合后的数据。
实战避坑:那些年我们踩过的合并雷区
理论懂了,实战中依然容易翻车。根据 N8N大学 的社区反馈,以下是两个最高频的“坑”:
坑点一:忘记配置“匹配键”(Join Keys)
在使用 Merge 模式时,很多同学直接把 Mode 切换了就运行,结果发现输出数据为空,或者莫名其妙多出了很多空字段。
原因: n8n 不会自动帮你猜哪个字段是用来匹配的。如果你不手动在 Join Keys 中指定字段名,合并逻辑就无法执行。
解决: 务必点击 "Add Field",分别设置 Input 1 和 Input 2 的匹配字段。注意字段名称必须完全一致(包括大小写)。
坑点二:数据格式不一致导致的“隐形合并失败”
你明明设置了 user_id 为匹配键,但数据就是合并不上。一查才发现,Input 1 的 user_id 是数字类型 123,而 Input 2 的 user_id 是字符串类型 "123"。
原因: 在 JavaScript(以及 n8n)中,123 !== "123"。类型不同,匹配就会失败。
解决: 在 Merge 节点之前,使用 Set 节点或 Function 节点统一数据格式。例如,使用 parseInt() 或 String() 强制转换类型,确保比较时类型一致。
FAQ:关于 Merge 节点的常见疑问
Q1: Merge 节点会自动去重吗?
A: 默认不会。Merge(Append 模式)只是简单地把数据拼接在一起。如果你需要去重,建议在 Merge 之后连接一个 Code 节点或 Deduplicate 节点,或者在导出到数据库时利用数据库特性去重。
Q2: 为什么我的 Merge 节点一直处于“等待”状态?
A: 这通常是因为你使用了 Wait for All 模式,但上游某个分支没有输出数据,或者数据流没有正确结束。检查你的输入分支,确保它们都能正常执行完毕。
Q3: 能否合并 3 个或更多的数据流?
A: 当然可以!n8n 允许一个 Merge 节点连接多个输入(通常是 2 个,但可以通过多级合并实现多个)。标准做法是:先合并流 A 和流 B,再将结果与流 C 合并。
总结与资源
Merge 节点是 n8n 处理复杂业务逻辑的基石。从简单的 Append 到复杂的 Join,它赋予了你清洗、整合多源数据的能力。记住,自动化不是简单的串联,而是数据的智能重组。
如果你在实战中遇到了棘手的合并问题,欢迎访问 N8N大学 (n8ndx.com) 查看更多深度教程,或加入我们的社区讨论。下一次,我们将深入探讨如何利用 Code 节点进行更高级的数据清洗。