你是不是也被 Merge 节点搞得头大?
在 N8N 大学的教学群里,我见过太多新手在使用 Merge 节点时翻车。
两个数据流进来,明明看着差不多,一合并却报红报错,或者数据莫名其妙少了一大半。最气人的是,官方文档虽然全,但全是术语,看完还是一头雾水。
今天,笔者就用最“大白话”把 n8n 的 Merge 节点拆解得明明白白。别再瞎猜了,看完这篇,你就能精准选出你的“最佳拍档”。
核心定义:Merge 节点到底在干什么?
简单来说,Merge 节点就是一个“数据红娘”。
它的工作就是把两条(或多条)数据流合并到一起。但关键在于:它有三种完全不同的“撮合方式”。选错方式,轻则数据错乱,重则整个工作流卡死。
想象一下,你左手拿着一份“用户注册表”,右手拿着一份“订单记录表”。你想把它们拼在一起,你是想按“用户ID”对齐?还是想简单粗暴地把所有数据堆在一起?这就是 Merge 节点要解决的问题。
三种合并策略深度解析
在 n8n 的 Merge 节点中,当你把多个输入连上时,Operation(操作) 下拉框里主要有三个“狠角色”。我们一个个来盘。
1. 插入(Append):最无脑的堆叠
适用场景: 数据结构完全不同,或者你只想简单地把数据连起来。
工作原理: 这是最简单的策略。它把第一条输入的数据(Input 1)全部拿出来,然后把第二条输入的数据(Input 2)全部拿出来,直接堆在后面。
- 它**不关心**数据是否重复。
- 它**不关心**数据是否有相同的字段。
- 它**不会**尝试去匹配行。
举个栗子:
Input 1: [{ "name": "张三" }, { "name": "李四" }]
Input 2: [{ "age": 18 }, { "age": 20 }]
合并结果: [{ "name": "张三" }, { "name": "李四" }, { "age": 18 }, { "age": 20 }]
笔者点评: 这种模式适合用来做“数据堆积”或者“日志归档”。比如你定时爬取数据,想把新数据追加到旧数据列表的后面,就选它。
2. 按位置合并(Merge by Position):一对一的对齐
适用场景: 两条数据流的记录数相同,且顺序严格对应,你需要把它们“面对面”拼起来。
工作原理: 它就像拉链一样,把 Input 1 的第 1 条数据和 Input 2 的第 1 条数据合并,Input 1 的第 2 条和 Input 2 的第 2 条合并,以此类推。
关键点: 如果两边数据数量不一致,多出来的那部分数据会被直接丢弃!
举个栗子:
Input 1: [{ "id": 1 }, { "id": 2 }]
Input 2: [{ "token": "abc" }, { "token": "xyz" }]
合并结果: [{ "id": 1, "token": "abc" }, { "id": 2, "token": "xyz" }]
笔者点评: 这种模式非常脆弱,除非你能百分之百保证两边数据数量和顺序一致(比如通过 Split in Batches 节点控制好的流程),否则慎用!否则你可能会丢失数据却不自知。
3. 按键合并(Merge by Key):最强大的关联
适用场景: 这是 80% 的实战场景。你需要根据某个共同的字段(比如用户 ID、订单号)把两条数据关联起来。
工作原理: 你指定一个“主键”(Key),n8n 会拿着这个 Key 去两边的数据里找匹配。
注意: 这里有两个关键参数:
- Output:选择 “Merge” 。这表示两边都匹配上的数据才会输出。
- Output:选择 “Keep Key” 。这表示保留指定的 Key 字段(避免重复)。
举个栗子:
Input 1 (用户): [{ "uid": "A01", "name": "张三" }]
Input 2 (订单): [{ "uid": "A01", "product": "手机" }]
合并结果: [{ "uid": "A01", "name": "张三", "product": "手机" }]
笔者点评: 这是数据清洗和自动化中最常用的功能。它能帮你把分散在不同接口的数据,通过一个唯一标识符(Key)“缝合”成一条完整的信息。
实战对比:谁才是你的最佳拍档?
为了让你一目了然,N8N 大学特地制作了这张对比表:
| 策略名称 | 核心逻辑 | 数据量变化 | 推荐指数 |
|---|---|---|---|
| 插入 (Append) | 简单堆叠,不管顺序 | 增加 (1+1) | ⭐⭐⭐ (简单粗暴) |
| 按位置合并 | 一一对应,像拉链 | 不变 (取最小值) | ⭐ (极度脆弱,除非确定顺序) |
| 按键合并 | 通过 Key 关联匹配 | 灵活 (取决于匹配规则) | ⭐⭐⭐⭐⭐ (最常用,最强大) |
为什么选择 n8n 处理数据合并?
相比 Zapier 或 Make,n8n 在处理 Merge 逻辑时有一个巨大的优势:可视化与灵活性。
在 n8n 中,你可以直观地看到每一条数据流经过 Merge 节点后的变化。更重要的是,n8n 的 Merge 节点支持更复杂的逻辑(比如你甚至可以合并对象数组),而且在开源版本中没有任何限制。
对于开发者来说,这意味着你可以构建极其复杂的数据聚合工作流,而不用担心“操作次数”不够用或者“节点”被锁定。
FAQ 问答
Q1: 为什么我的“按键合并”结果是空的?
笔者: 最常见的原因是 Key 值不匹配。请检查两边的 Key 字段名称是否完全一致(注意大小写),以及数据类型是否相同(比如字符串 "123" 和数字 123 是不匹配的)。建议先用 Set 节点把类型转换好。
Q2: Merge 节点报错 "Input 2 is empty" 怎么办?
笔者: 这通常是因为上游数据流没有产生任何数据。在 n8n 中,如果一条支路没有数据,Merge 节点可能会卡住。建议在 Merge 前加一个 If 节点判断数据是否存在,或者在 Merge 设置里勾选 "Include Empty Inputs"(取决于你的版本和需求)。
Q3: 想把三个数据流合并,Merge 节点支持吗?
笔者: 支持的!你可以拖拽多条连线进入同一个 Merge 节点。但请注意,如果是“按位置合并”,它会以最短的那条数据流为准;如果是“按键合并”,它会把所有数据流中的 Key 进行匹配。如果是“插入”,则会按顺序堆叠所有数据。
总结与资源
掌握 Merge 节点是通往 n8n 高手的必经之路。记住这个口诀:
- 要堆叠?用 Append。
- 要对齐?慎用按位置(除非很有把握)。
- 要关联?死磕按键合并(Key)。
如果你在实战中遇到了棘手的合并问题,欢迎来到 N8N 大学 的社区交流。这里是你的自动化避坑指南,我们下期见。