在 n8n 的世界里,数据流就像一条奔腾的河流。如果不去引导和筛选,它就会把垃圾数据、无关紧要的细节统统冲到你的下游流程里,导致系统效率低下甚至报错。这就是为什么 Filter 节点 是每个 n8n 玩家必须掌握的“守门员”。
作为 N8N大学 的首席主编,笔者见过太多新手在面对“如果 A 且 B,或者 C”这种逻辑时一脸懵逼。今天,这篇硬核教程就带你从零开始,彻底吃透 Filter 节点,让你的数据流从此变得干净、高效、可控。
为什么你需要 Filter 节点?
想象一下这个场景:你有一个 Webhook 监听表单提交,但你想只处理“VIP 用户”的订单,或者只筛选出“金额大于 500 元”的请求。如果没有 Filter,你可能得写一堆复杂的 JavaScript 代码,或者在后续节点里做冗余的判断。
Filter 节点的核心价值在于:“决策”与“分流”。它不修改数据,只决定数据的去向。它能帮你:
- 减少不必要的 API 调用(省钱省资源)。
- 避免下游流程被脏数据污染。
- 构建复杂的分支逻辑(If-Else),实现真正的流程自动化。
准备工作:理清你的数据结构
在添加 Filter 节点之前,笔者建议你先在 n8n 画布上放置一个 Test Data 节点,或者确保上游节点输出的数据结构是你熟悉的。因为 Filter 的所有判断都是基于上游传来的 JSON 字段。
你需要知道:
- 你要对比的字段名是什么?(例如
status) - 字段的数据类型是什么?(字符串、数字、布尔值?)
- 你的目标值是什么?(例如
"success")
实战一:基础筛选(单条件逻辑)
我们先从最简单的场景开始:过滤掉状态不为 "success" 的数据。
在工作流中添加一个 Filter 节点,并连接到你的数据源之后。点击节点,你会看到一个非常直观的界面。
配置步骤
- 添加条件:点击 "+ Add Condition" 按钮。
- 选择字段:在 "Field" 输入框中,输入上游数据中的字段名,比如
status。 - 选择操作符:点击下拉菜单,选择判断逻辑。最常用的是
String: Equals(字符串相等)或Number: Greater(数字大于)。 - 输入值:在 "Value" 中填入你要对比的值,比如
success。
实战技巧: 如果你希望忽略大小写(比如 "Success" 和 "success" 都算通过),请勾选操作符旁边的 Ignore Case 选项。这在处理用户输入时非常实用。
实战二:多条件逻辑(AND 与 OR 的组合)
实战来了。假设我们有一个电商订单流,需求如下:我们要处理订单,但前提是(1)订单金额大于 100 元,并且(2)用户等级是 VIP。
这就是典型的 AND 逻辑。
配置步骤
- 在 Filter 节点中,点击 "+ Add Condition",配置第一条:字段
amount,操作符Number: Greater,值100。 - 再次点击 "+ Add Condition",配置第二条:字段
user_level,操作符String: Equals,值VIP。 - 关键点:确保这两条条件之间的逻辑关系是 AND(通常默认就是)。这意味着必须同时满足两个条件,数据才能流出。
进阶玩法:OR 逻辑
如果需求变了:只要金额大于 100 元,或者 用户是 VIP,就通过。
在 Filter 节点的右上角,你会看到一个切换开关,允许你将逻辑从 "AND" 切换为 "OR"。或者,你可以通过组合多个 Filter 节点来实现更复杂的嵌套逻辑。
实战三:高级表达式与嵌套逻辑
当简单的 AND/OR 无法满足需求时,比如:“金额大于 100 且是 VIP,或者金额大于 500 且是普通用户”,你需要用到 n8n 的 Expression(表达式) 功能。
在 Filter 节点中,点击 "Add Expression"(通常在 Condition 的 Field 或 Value 处),你可以直接编写 JavaScript 代码片段。
硬核示例:
假设你有一个包含多个标签的数组字段 tags,你想筛选出包含 "urgent" 的数据。你不能直接用简单的 Equals,而需要用表达式:
item.json.tags.includes("urgent")
将这个表达式写入 Condition 的 Field 位置,并设置操作符为 Exists 或直接返回布尔值。这种方式赋予了你无限的可能性。
避坑指南:Filter 节点的常见陷阱
在 N8N大学 的教学案例中,90% 的 Filter 问题都源于数据类型不匹配。以下是两个最容易踩的坑:
- 字符串 vs 数字陷阱: 上游传来的数字
100和字符串"100"在 Filter 眼里是完全不同的。如果你的条件是Number: Equals,但传入的是带引号的字符串,筛选将失败。务必使用 Test Data 节点验证字段类型。 - 空值处理: 如果某个字段可能为
null或undefined,直接使用 String 操作符可能会报错。建议先用表达式判断:item.json.field != null。
记住:Filter 节点不会报错,它只会默默丢弃数据。如果你发现下游节点没收到数据,先回头检查 Filter 的日志(Output),看看哪些数据被“杀掉”了。
FAQ 问答
Q1: Filter 节点会修改我的原始数据吗?
A: 不会。Filter 节点只是决定哪些数据项(Item)能通过节点。通过的数据保持原样,被拦截的数据会直接终止在该分支,不会影响主流程的其他部分。
Q2: 我可以一次过滤多个字段的复杂组合吗?
A: 可以。你可以添加任意数量的 Condition。但如果你的逻辑过于复杂(例如嵌套 3 层以上的 AND/OR),建议将其拆分为多个 Filter 节点串联,这样更易于维护和调试。
Q3: 为什么我的 "Greater" (大于) 比较不起作用?
A: 99% 是因为数据类型问题。请确保你的字段是纯数字(Number),而不是数字字符串(String)。如果不确定,可以在 Filter 之前加一个 Set 节点,强制转换数据类型。
总结与资源
掌握 Filter 节点,意味着你从“能跑通流程”进阶到了“能控制流程”。它是构建复杂自动化逻辑的基石。从简单的状态判断,到复杂的业务规则路由,多加练习,你会发现自己对数据流的掌控力大幅提升。
更多 n8n 干货教程,请持续关注 N8N大学 (n8ndx.com)。如果你在配置中遇到了棘手的报错,欢迎在评论区留言,笔者会亲自为你解答。