Skip to content

Merge 节点#

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

0.194.0 中的重大变更

n8n 团队在 n8n 0.194.0 中彻底改造了此节点。本文档反映了节点的最新版本。如果您使用的是较旧版本的 n8n,可以在这里找到本文档的先前版本。

1.49.0 中的小变更

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

Mode > SQL Query 功能也在 n8n 版本 1.49.0 中添加,在较旧版本中不可用。

节点参数#

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

Append 追加#

保留所有输入的数据。选择 Number of Inputs 输入数量 以逐个输出每个输入的项目。节点等待所有连接输入的执行。

Sample Append mode inputs and output. Two separate data sources are on the left, one with items A, B, C and one with items D, E, F. The final data source combines both and lists A, B, C, D, E, F.
Append 模式输入和输出

Combine 合并#

合并来自两个输入的数据。在 Combine By 合并方式 中选择一个选项以确定您想要如何合并输入数据。

Matching Fields 匹配字段#

通过字段值比较项目。在 Fields to Match 要匹配的字段 中输入您要比较的字段。

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

  • Keep Matches 保留匹配项:合并匹配的项目。这类似于内连接。
  • Keep Non-Matches 保留非匹配项:合并不匹配的项目。
  • Keep Everything 保留所有内容:将匹配的项目合并在一起并包含不匹配的项目。这类似于外连接。
  • Enrich Input 1 丰富输入 1:保留输入 1 的所有数据,并添加来自输入 2 的匹配数据。这类似于左连接。
  • Enrich Input 2 丰富输入 2:保留输入 2 的所有数据,并添加来自输入 1 的匹配数据。这类似于右连接。
Sample Combine mode inputs and output. Two separate data sources are on the left. The final data source combines these data sources by matching fields.
按匹配字段合并模式输入和输出

Position 位置#

基于项目的顺序合并项目。输入 1 中索引 0 处的项目与输入 2 中索引 0 处的项目合并,依此类推。

Sample Combine mode inputs and output. Two separate data sources are on the left. The final data source combines these data sources by index position.
按位置合并模式输入和输出

All Possible Combinations 所有可能的组合#

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

Sample Combine mode inputs and output. Two separate data sources are on the left. The final data source combines these data sources by all possible combinations.
按所有可能组合合并模式输入和输出

Combine mode options 合并模式选项#

通过 Mode > Combine 模式 > 合并 合并数据时,您可以设置这些 Options 选项

  • Clash Handling 冲突处理:选择在数据流冲突或存在子字段时如何合并。有关详细信息,请参阅冲突处理
  • Fuzzy Compare 模糊比较:在比较字段时是否容忍类型差异(启用)或不容忍(禁用,默认)。例如,当您启用此功能时,n8n 将 "3"3 视为相同。
  • Disable Dot Notation 禁用点表示法:这防止在字段名称中使用 parent.child 访问子字段。
  • Multiple Matches 多重匹配:选择在比较数据流时 n8n 如何处理多重匹配。
    • Include All Matches 包含所有匹配项:如果有多个匹配项,则输出多个项目,每个匹配项一个。
    • Include First Match Only 仅包含第一个匹配项:保留每个匹配的第一个项目并丢弃其余的多重匹配。
  • Include Any Unpaired Items 包含任何未配对的项目:选择在按位置合并时是保留还是丢弃未配对的项目。默认行为是不包含没有匹配的项目。
Clash Handling 冲突处理#

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

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

  • 当字段值冲突时:选择要优先处理的输入,或选择始终向字段名称添加输入编号以保留所有字段和值,并在字段名称后附加输入编号以显示它来自哪个输入。
  • 合并嵌套字段
    • 深度合并:合并项目所有级别的属性,包括嵌套对象。这在处理复杂的嵌套数据结构时很有用,您需要确保合并所有级别的嵌套属性。
    • 浅层合并:仅合并项目顶级的属性,不合并嵌套对象。这在您有平面数据结构或只需要合并顶级属性而不担心嵌套属性时很有用。

SQL Query SQL 查询#

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

示例:

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

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

Choose Branch 选择分支#

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

  • Input 1 Data 输入 1 数据
  • Input 2 Data 输入 2 数据
  • A Single, Empty Item 单个空项目

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

模板和示例#

Browse 合并 integration templates, or search all templates

合并具有不均匀项目数的数据流#

传递到 Merge 节点输入 1 的项目将优先。例如,如果 Merge 节点在输入 1 中接收五个项目,在输入 2 中接收 10 个项目,它只处理五个项目。来自输入 2 的其余五个项目不会被处理。

使用 If 和 Merge 节点的分支执行#

0.236.0 及以下版本

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

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

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

例如,在下面的截图中,有一个包含编辑字段节点、If 节点和合并节点的工作流。标准 If 节点行为是执行一个数据流(在截图中,这是 true 输出)。但是,由于合并节点的存在,两个数据流都会执行,尽管 If 节点没有通过 false 数据流发送任何数据。

工作流截图。工作流有一个编辑字段节点,后跟一个 If 节点。它以合并节点结束。

试试看:逐步示例#

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

使用 Code 节点设置示例数据#

  1. 向画布添加一个 Code 节点并将其连接到 Start 节点。
  2. JavaScript Code 字段中粘贴以下 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 Code 字段中粘贴以下 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 节点连接到 Input 1,将第二个 Code 节点连接到 Input 2。运行工作流以将数据加载到 Merge 节点中。

最终工作流应如下所示:

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

Append 追加#

选择 Mode > Append,然后选择 Execute step

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

name language greeting
Stefan de
Jim en
Hans de
en Hello
de Hallo

Combine by Matching Fields 按匹配字段合并#

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

  1. 选择 Mode > Combine
  2. 选择 Combine by > Matching Fields
  3. Input 1 FieldInput 2 Field 中,都输入 language。这告诉 n8n 通过匹配每个数据集中 language 字段的值来合并数据。
  4. 选择 Execute step

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

name language greeting
Stefan de Hallo
Jim en Hello
Hans de Hallo

Combine by Position 按位置合并#

选择 Mode > CombineCombine 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

Combine by All Possible Combinations 按所有可能组合合并#

选择 Mode > CombineCombine 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