Merge#
使用 Merge 节点在所有流的数据都可用后,将来自多个流的数据组合在一起。
0.194.0 版本的主要更改
n8n 团队在 n8n 0.194.0 中彻底改造了此节点。本文档反映了节点的最新版本。如果您使用的是旧版 n8n,您可以在这里找到此文档的以前版本。
1.49.0 版本的小更改
n8n 1.49.0 版本引入了添加两个以上输入的选项。旧版本只支持最多两个输入。如果您运行的是旧版本并希望在这些版本中组合多个输入,请使用代码节点。
模式 > SQL 查询功能也是在 n8n 1.49.0 版本中添加的,在旧版本中不可用。
节点参数#
您可以通过选择模式来指定 Merge 节点应如何组合来自不同数据流的数据:
附加#
保留来自所有输入的数据。选择输入数量来依次输出每个输入的项目。节点等待所有连接输入的执行。

组合#
组合来自两个输入的数据。在组合依据中选择一个选项来确定您要如何合并输入数据。
匹配字段#
通过字段值比较项目。在要匹配的字段中输入您要比较的字段。
n8n 的默认行为是保留匹配的项目。您可以使用输出类型设置来更改此行为:
- 保留匹配项:合并匹配的项目。这类似于内连接。
- 保留非匹配项:合并不匹配的项目。
- 保留所有内容:将匹配的项目合并在一起,并包含不匹配的项目。这类似于外连接。
- 丰富输入 1:保留输入 1 的所有数据,并添加输入 2 的匹配数据。这类似于左连接。
- 丰富输入 2:保留输入 2 的所有数据,并添加输入 1 的匹配数据。这类似于右连接。

位置#
根据项目的顺序组合项目。输入 1 中索引 0 的项目与输入 2 中索引 0 的项目合并,依此类推。

所有可能的组合#
输出所有可能的项目组合,同时合并具有相同名称的字段。

组合模式选项#
当通过模式 > 组合合并数据时,您可以设置这些选项:
- 冲突处理:选择当数据流冲突或存在子字段时如何合并。详细信息请参考冲突处理。
- 模糊比较:在比较字段时是否容忍类型差异(开启)或不容忍(关闭,默认)。例如,当您启用此选项时,n8n 将
"3"
和3
视为相同。 - 禁用点符号表示法:这防止在字段名称中使用
parent.child
访问子字段。 - 多重匹配:选择 n8n 在比较数据流时如何处理多重匹配。
- 包含所有匹配项:如果有多个匹配项,则输出多个项目,每个匹配项一个。
- 仅包含第一个匹配项:保留每个匹配的第一个项目,丢弃其余的多个匹配项。
- 包含任何未配对的项目:选择在按位置合并时是保留还是丢弃未配对的项目。默认行为是排除没有匹配的项目。
冲突处理#
如果在一个索引处的多个项目具有相同名称的字段,这就是一个冲突。例如,如果输入1和输入2中的所有项目都有一个名为 language
的字段,这些字段就会发生冲突。默认情况下,n8n 优先考虑输入2,这意味着如果 language
在输入2中有值,n8n 在合并项目时会使用该值。
您可以通过选择 选项 > 冲突处理 来改变此行为:
- 当字段值冲突时:选择要优先考虑的输入,或选择 始终在字段名称中添加输入编号 来保留所有字段和值,并在字段名称后附加输入编号以显示它来自哪个输入。
- 合并嵌套字段
- 深度合并:合并项目所有级别的属性,包括嵌套对象。当处理复杂的嵌套数据结构并需要确保所有级别的嵌套属性都被合并时,这很有用。
- 浅合并:仅合并项目顶级的属性,不合并嵌套对象。当您有扁平的数据结构或只需要合并顶级属性而不需要担心嵌套属性时,这很有用。
SQL 查询#
编写自定义 SQL 查询来合并数据。
示例:
1 |
|
来自上一个节点的数据可作为表使用,您可以在 SQL 查询中根据它们的顺序将它们用作 input1、input2、input3 等。有关支持的 SQL 语句的完整列表,请参考 AlaSQL GitHub 页面。
选择分支#
选择要保留的输入。此选项始终等待直到两个输入的数据都可用。您可以选择输出:
- 输入 1 数据
- 输入 2 数据
- 单个空项目
节点输出所选输入的数据,不作任何更改。
模板和示例#
合并项目数量不均衡的数据流#
传入 Merge 节点输入 1 的项目将占优先地位。例如,如果 Merge 节点在输入 1 中收到 5 个项目,在输入 2 中收到 10 个项目,它只处理 5 个项目。输入 2 中剩余的 5 个项目不会被处理。
使用 If 和 Merge 节点进行分支执行#
0.236.0 及以下版本
n8n 在版本 1.0 中移除了此执行行为。本节适用于使用 v0(传统) 工作流执行顺序的工作流。默认情况下,这是在版本 1.0 之前构建的所有工作流。您可以在工作流设置中更改执行顺序。
如果您将合并节点添加到包含 If 节点的工作流中,它可能导致 If 节点的两个输出数据流都执行。
一个数据流触发合并节点,然后去执行另一个数据流。
例如,在下面的屏幕截图中,有一个包含编辑字段节点、If 节点和合并节点的工作流。标准的 If 节点行为是执行一个数据流(在屏幕截图中,这是 true 输出)。然而,由于合并节点,两个数据流都会执行,尽管 If 节点没有向 false 数据流发送任何数据。
试一试:逐步示例#
使用一些示例输入数据创建一个工作流来试用 Merge 节点。
使用 Code 节点设置示例数据#
- 向画布添加一个 Code 节点并将其连接到 Start 节点。
- 在 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', } } ];
- 添加第二个 Code 节点,并将其连接到 Start 节点。
- 在 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 节点中。
最终的工作流应该如下所示:
现在在模式中尝试不同的选项,查看它如何影响输出数据。
附加#
选择模式 > 附加,然后选择执行步骤。
您在表格视图中的输出应该如下所示:
name | language | greeting |
---|---|---|
Stefan | de | |
Jim | en | |
Hans | de | |
en | Hello | |
de | Hallo |
按匹配字段组合#
您可以合并这两个数据输入,使每个人都获得适合其语言的正确问候。
- 选择模式 > 组合。
- 选择组合依据 > 匹配字段。
- 在输入 1 字段和输入 2 字段中,输入
language
。这告诉 n8n 通过匹配每个数据集中language
字段的值来组合数据。 - 选择执行步骤。
您在表格视图中的输出应该如下所示:
name | language | greeting |
---|---|---|
Stefan | de | Hallo |
Jim | en | Hello |
Hans | de | Hallo |
按位置组合#
选择模式 > 组合,组合依据 > 位置,然后选择执行步骤。
您在表格视图中的输出应该如下所示:
name | language | greeting |
---|---|---|
Stefan | en | Hello |
Jim | de | Hallo |
保留未配对的项目#
如果您想保留所有项目,请选择添加选项 > 包含任何未配对的项目,然后开启包含任何未配对的项目。
您在表格视图中的输出应该如下所示:
name | language | greeting |
---|---|---|
Stefan | en | Hello |
Jim | de | Hallo |
Hans | de |
按所有可能的组合进行组合#
选择模式 > 组合,组合依据 > 所有可能的组合,然后选择执行步骤。
您在表格视图中的输出应该如下所示:
name | language | greeting |
---|---|---|
Stefan | en | Hello |
Stefan | de | Hallo |
Jim | en | Hello |
Jim | de | Hallo |
Hans | en | Hello |
Hans | de | Hallo |
🚀 与作者交流

📚 教程 💡 案例 🔧 技巧

⚡ 快答 🎯 定制 🚀 支持