合并和拆分数据#
在本章中,您将学习如何合并和拆分数据,以及在什么情况下执行这些操作可能有用。
合并数据#
在某些情况下,您可能需要合并(组合)和处理来自不同来源的数据。
合并数据可能涉及:
- 从多个来源创建一个数据集。
- 在多个系统之间同步数据。这可能包括删除重复数据或在一个系统中的数据更改时更新另一个系统中的数据。
单向 vs. 双向同步
在单向同步中,数据在一个方向上同步。一个系统作为唯一的真相来源。当主系统中的信息发生变化时,它会自动在辅助系统中发生变化;但如果辅助系统中的信息发生变化,更改不会反映在主系统中。
在双向同步中,数据在两个方向上同步(在两个系统之间)。当两个系统中任何一个的信息发生变化时,它会自动在另一个系统中发生变化。
这个博客教程解释了如何在两个 CRM 之间进行单向和双向数据同步。
在 n8n 中,您可以使用合并节点合并来自两个不同节点的数据,该节点提供几种合并选项:
注意,组合 > 按字段合并需要您输入要匹配的输入字段。这些字段应该在数据源之间包含相同的值,以便 n8n 可以正确地将数据匹配在一起。在合并节点中,它们被称为 Input 1 Field
和 Input 2 Field
。

点表示法中的属性输入
如果您想在合并节点参数 Input 1 Field
和 Input 2 Field
中引用嵌套值,您需要以点表示法格式输入属性键(作为文本,而不是表达式)。
Note
您还可以在别名 Join 下找到合并节点。如果您熟悉 SQL 连接,这可能更直观。
合并练习#
构建一个工作流,合并来自客户数据存储节点和代码节点的数据。
- 添加一个合并节点,它从客户数据存储节点获取
Input 1
,从代码节点获取Input 2
。 - 在客户数据存储节点中,运行操作 Get All People。
- 在代码节点中,创建一个包含两个对象的数组,每个对象有三个属性:
name
、language
和country
,其中属性country
有两个子属性code
和name
。- 用来自客户数据库的两个角色的信息填写这些属性的值。
- 例如,Jay Gatsby 的语言是英语,国家名称是美国。
- 在合并节点中,尝试不同的合并选项。
显示解决方案
此练习的工作流如下所示:
如果您使用选项 Keep Matches 使用名称作为要匹配的输入字段合并数据,结果应该如下所示(注意此示例仅包含 Jay Gatsby;根据您选择的角色,您的可能看起来不同):
要检查节点的配置,您可以复制下面的 JSON 工作流代码并将其粘贴到您的编辑器 UI 中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
|
循环#
在某些情况下,您可能需要对数组的每个元素或每个数据项目执行相同的操作(例如向通讯录中的每个联系人发送消息)。在技术术语中,您需要遍历数据(使用循环)。
n8n 通常自动处理这种重复处理,因为节点对每个项目运行一次,所以您不需要在工作流中构建循环。
但是,有一些节点和操作的例外,需要您在工作流中构建循环。
要在 n8n 工作流中创建循环,您需要将一个节点的输出连接到前一个节点的输入,并添加一个 If 节点 来检查何时停止循环。
分批拆分数据#
如果您需要处理大量传入数据、多次执行代码节点或避免 API 速率限制,最好将数据拆分为批次(组)并处理这些批次。
对于这些过程,使用循环遍历项目节点。此节点将输入数据拆分为指定的批次大小,并在每次迭代中返回预定义数量的数据。
循环遍历项目节点的执行
循环遍历项目节点 在所有传入项目被分成批次并传递给工作流中的下一个节点后停止执行,因此不需要添加 If 节点 来停止循环。
循环/批次练习#
构建一个工作流,读取来自 Medium 和 dev.to 的 RSS 订阅源。工作流应包含三个节点:
- 一个代码节点,返回 Medium(
https://medium.com/feed/n8n-io
)和 dev.to(https://dev.to/feed/n8n
)RSS 订阅源的 URL。 - 一个具有
Batch Size: 1
的循环遍历项目节点,它接收来自代码节点和 RSS 读取节点 的输入并遍历项目。 - 一个 RSS 读取节点,获取 Medium RSS 订阅源的 URL,作为表达式传递:
{{ $json.url }}
。- RSS 读取节点 是例外节点之一,它只处理接收到的第一个项目,因此需要循环遍历项目节点来遍历多个项目。
显示解决方案
- 添加一个代码节点。您可以通过几种方式格式化代码,一种方式是:
- 将模式设置为
Run Once for All Items
。 - 将语言设置为
JavaScript
。 - 复制下面的代码并将其粘贴到 JavaScript 代码编辑器中:
1 2 3 4 5 6 7 8 9 10 11 12 13
let urls = [ { json: { url: 'https://medium.com/feed/n8n-io' } }, { json: { url: 'https://dev.to/feed/n8n' } } ] return urls;
- 将模式设置为
- 添加连接到代码节点的循环遍历项目节点。
- 将批次大小设置为
1
。
- 将批次大小设置为
- 循环遍历项目节点 自动添加一个名为"Replace Me"的节点。用 RSS 读取节点 替换该节点。
- 将 URL 设置为使用来自代码节点的 url:
{{ $json.url }}
。
- 将 URL 设置为使用来自代码节点的 url:
此练习的工作流如下所示:
要检查节点的配置,您可以复制下面的 JSON 工作流代码并将其粘贴到您的编辑器 UI 中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
|