🔂常用的逻辑(条件、循环等)节点详细介绍

type
status
date
slug
summary
tags
category
icon
password
author
标签
第三方接入
 
对于学习编程来说,不管是任何语言,首先需要学习的就是逻辑与判断。
尽管 n8n 舍弃了编码的过程,但对于制作 Workflow 来说,本质上仍然是在用图形化进行编程,因此你需要用到一系列逻辑节点。
在 n8n 中,逻辑节点被归类在 Flow 类目下,也就是流程控制。
它支持以下 9 种流程控制节点:
名字
说明
Filter
过滤,从上游输入的一堆 items 里过滤掉不满足条件的。
If
判断,根据上游输入的数据判断给出 ture 和 false 结果,并将数据流分叉成两个。
Loop Over Items
循环,将上游输入的一堆 items 中的每一个,运行一遍 loop 中的部分,当所有 items 运行完毕之后,将所有运行结果打包输出给下游。
Merge
合并,将两个上游输出的数据合并成一个。
Compare Datasets
比较,将两个上游输出的数据进行比较,并决定在什么情况下用哪一个输出给下有。
Execute Workflow
执行另一个 Workflow
Stop and Error
停止 Workflow 并输出错误
Switch
路由,可以理解为 If 的进阶版,根据上游输入的数据进行多重判断,并依据结果将数据流分叉成多个。
Wait
等待,运行到这里暂停一会儿,主要用于向第三方 API 发起请求时避免超过对方访问限制。
流程控制节点一般来说非常简单,如果你能理解它所对应的逻辑本身,你在看完这个表之后应该已经知道如何用了。
如果你此前没有过任何编程经验,下面我们将通过四个实际的例子来来讲解 If、Switch、Merge、Loop 四个 n8n 中最常用的逻辑控制节点。
 

案例1:我有一张数据表,其中一列是文章标题,我希望在后续的 Workflow 中对包含“评论”的内容单独处理,我该如何操作?(IF 节点用法)

notion image
notion image
解释:
在这个 case 中,我们使用了 If 节点,使用它来判断标题中是否存在“评论”两个字。
整个 Workflow 首先从给定的 Google Sheets 中读取所有数据,然后在 If 节点里,我们添加了一个 Conditions(条件),这个 Condition 是以 {{ $json['标题'] }} 为判断源,如果它 contains(包含)“评论”二字,就返回 true,否则就返回 false。
在 Output 面板,我们可以看到后续 Workflow 被分为了 True Branch(85 个 item)和 False Branch(2710 个 item)。
测试运行后,回到编辑器页面,我们会看到,对应 True Branch 的 85 个数据被分流到了上面的分叉,False Branch 的分流到了下面的分叉,方便我们可以做后续不同的处理。
  • If 的 Conditions 有好多种逻辑,支持字符串、数字、日期与时间、布朗、数组和对象字段类型的判断,这里只做最简单的介绍。对应的判断逻辑你可以在需要的时候自行尝试,或在 n8n 官方文档中查阅。
  • If 支持多个 Conditions 之间用 AND(且)与 OR(或)连接。比如你可以在一个 If 中设置它判断“包含评论”且“包含高质量”,或者实质它判断“包含评论”或“包含高质量”。
 

案例2:我有一张数据表,其中一列是文章标题,我希望在后续的 Workflow 中对“包含评论”、“包含高质量”、”包含要闻“的内容分别单独处理,我该如何操作?(Switch 节点用法)

notion image
notion image
经过 If 的学习,你应该会意识到,这个案例中的判断,其实可以通过设置多层 If 来实现。比如先处理包含评论的,再处理包含高质量的,最后再处理包含要闻的。但这样会增加 Workflow 的复杂程度,还会降低它的运行效率。因此,在面临这种需要处理两个以上分叉路径的逻辑时,我们就可以用更复杂的 Switch 来处理。
Switch 节点支持你添加多个判断逻辑,它会根据每个判断逻辑将匹配的数据送往对应的分叉。可以看到,在我们运行之后,数据流被分为了三叉,分别是标题里有评论的,标题里有高质量的和标题里有要闻的。
在默认情况下,Switch 节点遵循串联的判断模式,也就是它会按照你在参数页面配置路由规则的上下顺序,从上到下判断。一条数据如果已经被匹配到了分叉 1,它就不会再出现在分叉 2 里,哪怕它也符合分叉 2 的判断逻辑。
如果,你需要 Switch 节点在各路由规则之间采用并联方式判断,那么你需要在 Options 里开启 Send data to all matching outputs。这样的话,一条数据在同时满足分叉 1 和分叉 2 的情况下,它就会同时出现在两个分叉里。
 

案例3:我从数据表中筛选出了对“包含评论”、“包含高质量”和”包含要闻“的内容,我现在分别对他们的数据处理已经完成,现在希望把它们合并回一个数据流写进库里,怎么办?(Merge 节点用法)

 
notion image
notion image
在这里,我们需要使用 Merge 节点。
由于 Merge 节点一次只能合并两个分叉,所以我们要合并两次,先合并两个,再将第三个与已经合并后的分叉进行合并。
由于我们的三个分叉出来的数据流在 表头(属性) 上是一致的,因此我们可以直接选择 Append 作为合并模式。
Merge 节点支持三种合并模式,官方文档给出了详细的解释,直接看图会更加清晰:
 
Append
Append
Combine
Combine
Merge by position
Merge by position
简答来说:
Append - 直接将分叉 2 的数据加在分叉 1 的后面,适用于表头 表头(属性) 完全一致的两个分叉合并。
Combine - 将分叉 2 与分叉 1 同一索引的不同表头(属性)合并到一起,比如:分叉 2 里有姓名和年龄,分叉 1 里有姓名和性别,通过 Combine,你就能获得一个包含姓名、年龄和性别的数据表。
Merge by Position - 按分叉 2 和分叉 1 的数据位置,直接把两个数据强加在一起。适用范围比较窄,我想不到啥用处。
 

案例4:从多个 RSS 处获取内容怎么办?(Loop 节点用法)

n8n 中支持 Loop Over Items 节点来创造一个循环。但是,在大部分情况下你不需要该节点来创造循环。
哈哈,是不是被绕晕了?
事情是这样的,当我们在日常编程的时候,我们如果需要对一个数据表中的每一行进行处理,我们首先想到的是需要构造一个循环,但对于 n8n 来说它考虑到了这种常见用法,因此许多 n8n 中的节点是内置循环的。
比如,上游节点传来了一个包含 10 行包含 URL 的数据表,你在当前节点想用 RSS Read 读取这 10 个 RSS 地址里的内容,你实际上不需要用到 Loop Over Items。在默认情况下,当你就将一个数组变量拖动到当前节点的时候,当前节点就会将数组变量中的每一行都执行一遍:
notion image
如果你想让某个节点在处理某个数组变量里的值时,只运行一次,你需要在节点的 Settings 页面打开 Execute Once 选项。
n8n 节点中的内置循环,甚至包含了依据条件结束循环,你只需要这样连接一个 If 节点即可:
notion image
在这个官方示例中,If 的 Ture 分叉被指回了 Twitter 节点的输入端。而 If 节点中的判断条件为:
这意味着,在 Twitter 节点被运行到第 5 次时,节点会进入 false 分叉结束循环。
这个示例 Workflow 的结果是,会自动在 Twitter 上发送 5 遍 Hello from n8n!
但是,在一些特殊的情况下(比如想要分批处理),我就想用 Loop 来构造循环怎么办?
notion image
notion image
在这个 Workflow 中,我们就添加了一个 Loop Over Items,它会将上游传递过来的 URL,分批次循环执行 RSS Read。当所有的批次执行完毕之后,数据被合并推送到 done 分叉,执行后续的循环外操作。
与直接用 RSS Read 内置循环的区别是,在这里我将 Loop Over Items 的 Batch Size 参数设置为了 10。这意味着,它会首先将上游传递过来的数据,拆分成 10 行一包,每次只向循环中的 RSS Read 发送 10 包。这时,如果我在循环内加一个 Wait 节点,并且设置为 Wait 1 分钟,就可以有效的控制每分钟只对 10 个 RSS 地址发起请求,拉长请求间隔,避免被对方服务器封禁。
根据官方说明,建议使用 Loop Over Items 的场景有:
  1. 分批处理数据,以控制 Workflow 的性能消耗;
  1. 你十分确定输入进来的数据有时会导致节点运行错误,你希望在某一行运行错误的情况下,剩下的行依然能继续处理;
  1. 你希望控制数据处理的频度,以保障第三方 API 可以正常运行。
在这些官方场景之外,我们还发现一种情况下需要使用 Loop 节点,比如你需要创建两个或两个以上列的交叉组合引用。关于这个场景的用法,你可以阅读:《如何实现一个n*m循环?
广告
保障私有部署环境安全的基本操作AI节点详细介绍
Loading...
目录