N8N中文教程
集成节点/Built in_nodes/Core_nodes

Merge#

使用 Merge 节点将来自多个数据流的数据进行合并,当所有数据流的数据都可用时执行合并操作。

0.194.0 版本的重大变更#

n8n 团队在 n8n 0.194.0 版本中对此节点进行了全面重构。本文档反映的是该节点的最新版本。如果您使用的是旧版 n8n,可以在此处查看旧版文档。

1.49.0 版本的次要变更#

n8n 1.49.0 版本引入了支持两个以上输入的功能。旧版本仅支持最多两个输入。如果您运行的是旧版本,并希望在这些版本中合并多个输入,请使用代码节点。

模式 > SQL 查询功能同样在 n8n 1.49.0 版本中添加,旧版本不可用。

节点参数#

您可以通过选择模式来指定 Merge 节点应如何组合不同数据流的数据:

追加#

保留所有输入的数据。选择输入数量来按顺序输出每个输入的数据项。该节点会等待所有连接的输入执行完成。

追加模式输入输出示例。左侧是两个独立数据源,一个包含 A、B、C 项,另一个包含 D、E、F 项。最终数据源将两者合并,列出 A、B、C、D、E、F。 追加模式输入输出

合并#

合并两个输入的数据。在合并方式中选择选项以确定如何合并输入数据。

匹配字段#

通过字段值比较数据项。在要匹配的字段中输入要比较的字段。

n8n 的默认行为是保留匹配项。您可以使用输出类型设置来更改此行为:

  • 保留匹配项:合并匹配的数据项。这类似于内连接(inner join)。
  • 保留非匹配项:合并不匹配的数据项。
  • 保留所有项:合并匹配的数据项,并包含不匹配的数据项。这类似于外连接(outer join)。
  • 丰富输入 1:保留输入 1 的所有数据,并添加输入 2 的匹配数据。这类似于左连接(left join)。
  • 丰富输入 2:保留输入 2 的所有数据,并添加输入 1 的匹配数据。这类似于右连接(right join)。

按字段匹配模式的输入输出示例。左侧是两个独立的数据源,最终数据源通过字段匹配合并这些数据 按字段匹配模式的输入与输出

按位置合并#

根据数据项的顺序进行合并。输入1中索引0的数据项将与输入2中索引0的数据项合并,依此类推。 按位置合并模式的输入输出示例。左侧是两个独立的数据源,最终数据源通过索引位置合并这些数据 按位置合并模式的输入与输出

全组合模式#

输出所有可能的数据项组合,同时合并同名字段。 全组合模式的输入输出示例。左侧是两个独立的数据源,最终数据源通过全组合方式合并这些数据 全组合模式的输入与输出

合并模式选项#

通过模式 > 合并进行数据合并时,可设置以下选项

  • 冲突处理:当数据流冲突或存在子字段时,选择合并方式。详见冲突处理
  • 模糊比较:是否在字段比较时容忍类型差异(启用),或严格匹配(禁用,默认)。例如启用后,n8n会将"3"3视为相同值
  • 禁用点标记法:阻止通过父级.子级方式在字段名中访问子字段
  • 多重匹配:选择n8n在比较数据流时处理多重匹配的方式
    • 包含所有匹配:若存在多重匹配则输出多个数据项,每个匹配对应一个
    • 仅包含首个匹配:每个匹配仅保留第一个数据项,丢弃其余多重匹配
  • 包含未配对项:按位置合并时选择是否保留未配对的数据项。默认行为是排除无匹配项的数据
冲突处理#

当同一索引下的多个项存在同名字段时,就会产生冲突。例如,如果输入1和输入2中的所有项都有一个名为 language 的字段,这些字段就会产生冲突。默认情况下,n8n会优先采用输入2的值,这意味着如果 language 字段在输入2中有值,n8n在合并项时会使用该值。 您可以通过选择 选项 > 冲突处理 来更改此行为:

  • 当字段值冲突时:选择要优先采用的输入,或选择 始终在字段名后添加输入编号 以保留所有字段和值,并在字段名后附加输入编号以显示其来源。
  • 合并嵌套字段
    • 深度合并:在项目的所有层级(包括嵌套对象)合并属性。这在处理需要确保所有嵌套属性层级都被合并的复杂嵌套数据结构时非常有用。
    • 浅层合并:仅在项目的顶层合并属性,不合并嵌套对象。这在处理扁平数据结构或只需合并顶层属性而无需考虑嵌套属性时非常有用。

SQL查询#

编写自定义SQL查询来合并数据。 示例:

1

| ``` SELECT*FROMinput1LEFTJOINinput2ONinput1.name=input2.id


---|---
之前节点的数据可作为表使用,您可以在SQL查询中按顺序将它们作为input1、input2、input3等使用。完整支持的SQL语句列表请参考AlaSQL GitHub页面。

### 选择分支#
选择要保留的输入。此选项会始终等待两个输入的数据都可用后再执行。您可以选择**输出**:
  * **输入1数据**
  * **输入2数据**
  * **单个空项**

该节点输出所选输入的数据,且不对其进行任何修改。

## 模板与示例#
**使用AI抓取并总结网页内容**
由 n8n 团队提供
查看模板详情
**使用Seedance生成AI病毒视频并上传至TikTok、YouTube和Instagram**
由 Dr. Firas 提供
查看模板详情
**✨🤖 使用AI实现多平台社交媒体内容创作自动化**
由 Joseph LePage 提供
查看模板详情
浏览Merge集成模板,或搜索所有模板

## 合并数量不匹配的数据流#
传入Merge节点输入1的数据项将优先处理。例如,如果Merge节点在输入1收到5个数据项,在输入2收到10个数据项,则仅处理5个数据项。输入2中剩余的5个数据项将不会被处理。

## 使用If节点和Merge节点的分支执行#
0.236.0及更早版本
n8n在1.0版本中移除了此执行行为。本节适用于使用**v0(旧版)**工作流执行顺序的工作流。默认情况下,所有在1.0版本之前构建的工作流都采用此顺序。您可以在工作流设置中更改执行顺序。

如果在包含If节点的工作流中添加Merge节点,可能会导致If节点的两个输出数据流都被执行。
一个数据流会触发Merge节点,然后该节点会继续执行另一个数据流。

例如,下方截图中的工作流包含一个Edit Fields节点、If节点和Merge节点。If节点的标准行为是执行一个数据流(截图中为**true**输出)。但由于Merge节点的存在,即使If节点没有向**false**数据流发送任何数据,两个数据流都会被执行。
[工作流截图。工作流包含Edit Fields节点、If节点,最后是Merge节点。](https://docs.n8n.io/_images/integrations/builtin/core-nodes/merge/if-merge-node.png)

## 实践演练:分步示例#
创建一个包含示例输入数据的工作流来试用Merge节点。

### 使用Code节点设置示例数据#
  1. 在画布上添加Code节点并将其连接到Start节点
  2. 在**JavaScript代码**字段中粘贴以下JavaScript代码片段:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

| ```
return[
{
json:{
name:'Stefan',
language:'de',
}
},
{
json:{
name:'Jim',
language:'en',
}
},
{
json:{
name:'Hans',
language:'de',
}
}
];

---|--- 3. 添加第二个 Code 节点,并将其连接到 Start 节点。4. 在 JavaScript 代码 字段中粘贴以下 JavaScript 代码片段:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

| ``` return[ { json:{ greeting:'Hello', language:'en', } }, { json:{ greeting:'Hallo', language:'de', } } ];


---|---


### 尝试不同的合并模式#
添加 Merge 节点。将第一个 Code 节点连接到 **输入 1**,第二个 Code 节点连接到 **输入 2**。运行工作流以将数据加载到 Merge 节点。
最终的工作流应如下所示:
查看模板详情
现在尝试 **模式** 中的不同选项,查看其对输出数据的影响。
#### 追加模式#
选择 **模式** > **追加**,然后选择 **执行步骤**。
表格视图中的输出应如下所示:
**姓名** | **语言** | **问候语**
---|---|---
Stefan | de |
Jim | en |
Hans | de |
| en | Hello
| de | Hallo
#### 按匹配字段合并#
您可以合并这两个数据输入,使每个人都能获得对应其语言的正确问候语。
  1. 选择 **模式** > **组合**。
  2. 选择 **组合方式** > **匹配字段**。
  3. 在 **输入 1 字段** 和 **输入 2 字段** 中均输入 `language`。这指示 n8n 通过匹配每个数据集中 `language` 字段的值来组合数据。
  4. 选择 **执行步骤**。

表格视图中的输出应如下所示:
**name** | **language** | **greeting**
---|---|---
Stefan | de | Hallo
Jim | en | Hello
Hans | de | Hallo
#### 按位置合并#
选择 **Mode** > **Combine**,**Combine by** > **Position**,然后选择 **Execute step**。
表格视图中的输出应如下所示:
**name** | **language** | **greeting**
---|---|---
Stefan | en | Hello
Jim | de | Hallo
##### 保留未匹配项#
如需保留所有数据项,请选择 **Add Option** > **Include Any Unpaired Items**,然后开启 **Include Any Unpaired Items**。
表格视图中的输出应如下所示:
**name** | **language** | **greeting**
---|---|---
Stefan | en | Hello
Jim | de | Hallo
Hans | de |
#### 按全组合方式合并#
选择 **Mode** > **Combine**,**Combine by** > **All Possible Combinations**,然后选择 **Execute step**。
表格视图中的输出应如下所示:
**name** | **language** | **greeting**
---|---|---
Stefan | en | Hello
Stefan | de | Hallo
Jim | en | Hello
Jim | de | Hallo
Hans | en | Hello
Hans | de | Hallo