Skip to content

合并

一旦所有流的数据可用,就使用合并节点来组合来自多个流的数据。

0.194.0 中的重大变化

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

1.49.0 中的细微变化

n8n 1.49.0 版本引入了添加两个以上输入的选项。旧版本最多仅支持两个输入。如果您正在运行旧版本,并且想要在这些版本中合并多个输入,请使用代码节点

模式> SQL 查询功能也是在 n8n 版本 1.49.0 中添加的,但在旧版本中不可用。

节点参数

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

附加

保留所有输入的数据。选择输入数量,逐个输出每个输入项。节点等待所有连接的输入执行完毕。

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

结合

合并两个输入的数据。在“合并方式”中选择一个选项,以确定合并输入数据的方式。

匹配字段

按字段值比较项目。在“要匹配的字段”中输入要比较的字段。

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

  • 保留匹配项:合并匹配的项。这类似于内连接。
  • 保留不匹配项:合并不匹配的项目。
  • 保留所有内容:将匹配的项合并在一起,并包含不匹配的项。这类似于外连接。
  • 丰富输入 1 :保留输入 1 中的所有数据,并添加输入 2 中的匹配数据。这类似于左连接。
  • 丰富输入 2 :保留输入 2 中的所有数据,并添加输入 1 中的匹配数据。这就像右连接。
组合模式的输入和输出示例。左侧是两个独立的数据源。最终数据源通过匹配字段来组合这些数据源。
通过匹配字段模式合并输入和输出

位置

根据项目的顺序进行合并。输入 1 中索引 0 处的项目将与输入 2 中索引 0 处的项目合并,依此类推。

示例组合模式的输入和输出。左侧是两个独立的数据源。最终数据源按索引位置组合这些数据源。
按位置模式输入和输出组合

所有可能的组合

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

示例组合模式的输入和输出。左侧是两个独立的数据源。最终数据源通过所有可能的组合将这些数据源组合在一起。
通过所有可能的组合模式输入和输出进行组合

组合模式选项

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

  • 冲突处理:选择当数据流发生冲突或存在子字段时如何合并。有关详情,请参阅冲突处理
  • 模糊比较:比较字段时是否容忍类型差异(启用)或不容忍(禁用,默认)。例如,启用此功能时,n8n 会将和视为相同。
  • 禁用点符号:这可以防止使用字段名称访问子字段。
  • 多重匹配:选择 n8n 在比较数据流时如何处理多重匹配。
    • 包含所有匹配
    • :如果有多个匹配,则输出多个项目,每个匹配对应一个。
    • 仅包含第一个匹配
    • :保留每个匹配的第一个项目,并丢弃其余的多个匹配。
  • 包含任何未配对的项目:选择按位置合并时保留还是丢弃未配对的项目。默认行为是忽略不匹配的项目。
冲突处理

如果索引中的多个项目具有相同名称的字段,则会发生冲突。例如,如果输入 1 和输入 2 中的所有项目都包含一个名为 的字段,则这些字段会发生冲突。默认情况下,n8n 会优先处理输入 2,这意味着如果输入 2 中有值,n8n 会在合并项目时使用该值。

您可以通过选择“选项” > “冲突处理”来更改此行为:

  • 当字段值发生冲突时:选择要优先考虑的输入,或选择始终将输入编号添加到字段名称以保留所有字段和值,并将输入编号附加到字段名称以显示其来自哪个输入。
  • 合并嵌套字段
    • 深层合并
    • :合并项所有层级的属性,包括嵌套对象。这在处理复杂的嵌套数据结构时非常有用,因为您需要确保所有层级的嵌套属性都已合并。
    • 浅层合并
    • :仅合并项顶层的属性,而不合并嵌套对象。当您拥有扁平的数据结构,或者您只需要合并顶层属性而不必担心嵌套属性时,这非常有用。

SQL查询

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

例子:

1
SELECT * FROM input1 LEFT JOIN input2 ON input1.name = input2.id

先前节点的数据以表的形式提供,您可以根据它们的顺序在 SQL 查询中将它们用作输入 1、输入 2、输入 3 等。请参阅AlaSQL GitHub 页面,查看受支持 SQL 语句的完整列表。

选择分行

选择要保留的输入。此选项始终等待两个输入的数据可用。您可以选择输出

  • 输入1 数据
  • 输入2 数据
  • 单个空项目

节点输出所选输入的数据,但不对其进行更改。

模板和示例

没有任何

合并项目数量不均匀的数据流

传入合并节点输入 1 的项目将优先处理。例如,如果合并节点在输入 1 中收到 5 个项目,在输入 2 中收到 10 个项目,则它只会处理其中 5 个项目。输入 2 中剩余的 5 个项目不会被处理。

使用 If 和 Merge 节点执行分支

0.236.0 及以下版本

n8n 在 1.0 版本中移除了此执行行为。本节适用于使用v0(旧版)工作流执行顺序的工作流。默认情况下,这适用于所有在 1.0 版本之前构建的工作流。您可以在工作流设置中更改执行顺序。

如果将合并节点添加到包含 If 节点的工作流中,则会导致 If 节点的两个输出数据流都执行。

一个数据流触发合并节点,然后合并节点执行另一个数据流。

例如,下图中有一个工作流,包含“编辑字段”节点、“如果”节点和“合并”节点。“如果”节点的标准行为是执行一个数据流(在下图中,这是真正的输出)。然而,由于“合并”节点的存在,尽管“如果”节点没有向“错误”数据流发送任何数据,但两个数据流都会执行。

工作流的屏幕截图。该工作流包含一个“编辑字段”节点,后跟一个“如果”节点,最后是一个“合并”节点。

尝试一下:一步一步的示例

创建一个包含一些示例输入数据的工作流来尝试合并节点。

使用代码节点设置示例数据

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

尝试不同的合并模式

添加合并节点。将第一个代码节点连接到输入 1 ,将第二个代码节点连接到输入 2 。运行工作流将数据加载到合并节点。

最终的工作流程应如下所示:

没有任何

现在尝试模式中的不同选项,看看它如何影响输出数据。

附加

选择模式>附加,然后选择执行步骤

表格视图中的输出应如下所示:

姓名 语言 问候
斯蒂芬
吉姆 英文
汉斯
英文 你好
你好

按匹配字段合并

您可以合并这两个数据输入,以便每个人都能获得适合其语言的正确问候语。

  1. 选择模式>合并
  2. 选择“按以下方式合并” > “匹配字段”
  3. 输入 1 字段输入 2 字段中,输入。这告诉 n8n 通过匹配每个数据集中字段中的值来组合数据。
  4. 选择执行步骤

表格视图中的输出应如下所示:

姓名 语言 问候
斯蒂芬 你好
吉姆 英文 你好
汉斯 你好

按位置合并

选择模式>组合按组合>位置,然后选择执行步骤

表格视图中的输出应如下所示:

姓名 语言 问候
斯蒂芬 英文 你好
吉姆 你好
保留未配对的物品

如果要保留所有项目,请选择添加选项>包含任何未配对的项目,然后打开包含任何未配对的项目

表格视图中的输出应如下所示:

姓名 语言 问候
斯蒂芬 英文 你好
吉姆 你好
汉斯

按所有可能的组合进行组合

选择模式>组合组合方式>所有可能的组合,然后选择执行步骤

表格视图中的输出应如下所示:

姓名 语言 问候
斯蒂芬 英文 你好
斯蒂芬 你好
吉姆 英文 你好
吉姆 你好
汉斯 英文 你好
汉斯 你好