别让无效数据淹没你的工作流
在自动化构建这条路上,笔者见过太多新手把 n8n 跑成了“数据搬运工”。Webhook 接收一堆数据,不管三七二十一全往后端塞,结果要么是 API 报错,要么是数据库里塞满了垃圾信息。
**Filter 节点** 就是你的“数据安检门”。但很多教程只教你用一个条件,现实中我们需要的是“如果 A 且 (B 或 C)”这种复杂的逻辑。今天,N8N大学 就带你彻底搞定 Filter 节点的多条件组合,让你的自动化既快又稳。
核心实战:多条件组合逻辑搭建
实战开始前,笔者先假设一个场景:你正在监控电商订单,你需要筛选出“金额大于 100 元”且“来自 VIP 用户”或者“包含特定商品 ID”的订单。这就是典型的多条件组合。
步骤一:理解逻辑运算符(AND 与 OR)
在 n8n 的 Filter 节点中,核心在于“Condition”里的逻辑连接符。
- AND (且):所有条件必须同时满足。例如:金额 > 100 AND 用户等级 = VIP。
- OR (或):满足任意一个条件即可。例如:商品 ID = A OR 商品 ID = B。
- 嵌套逻辑:这是 n8n 的进阶用法,允许你创建复杂的逻辑组,就像写代码里的括号一样。
步骤二:构建“且”与“或”的混合逻辑
这是最容易卡住的地方。很多新手试图在单行里堆砌所有条件,结果逻辑乱成一团。N8N大学 建议使用“组合器(Combinator)”功能。
操作路径如下:
- 拖入 Filter 节点,连接你的数据源。
- 点击 **Rules** 下方的 **Add Condition**,设置第一条规则(如:金额 > 100)。
- 点击规则右侧的 **AND** 图标,选择 **OR**,此时会出现一个逻辑组。
- 在这个逻辑组内,添加你的“或”条件(如:用户等级 = VIP OR 商品 ID = 12345)。
最终的逻辑结构应该是:(金额 > 100) AND (用户等级 = VIP OR 商品 ID = 12345)。这样 n8n 才能正确解析优先级。
步骤三:利用“Expression”处理动态数据
静态数据直接填值即可,但实战中我们面对的是动态数据流。这时必须使用表达式。
在条件值的输入框中,点击右侧的 fx 图标。例如,你想判断 JSON 响应体中的状态码是否为 200:
{{ $json.status }} == 200
如果是多字段比较,比如判断“创建时间”是否晚于“当前时间”:
{{ new Date($json.created_at) > new Date() }}
记住:n8n 的 Filter 节点支持 JavaScript 表达式,这意味着你可以在这里写任何 JS 逻辑,只要最终返回 true 或 false。
实战技巧与避坑指南
懂了原理只是第一步,实战中还有不少“暗礁”。以下是 N8N大学 总结的血泪经验。
技巧一:善用“分组(Group)”功能简化视图
当你的过滤逻辑超过 3 个条件时,界面会变得非常难看。在 Filter 节点设置中,你可以将相关的条件选中,然后点击 **Group Selection**。这不仅让逻辑结构更清晰,还能避免因为漏掉 AND/OR 连接符导致的逻辑错误。这在团队协作维护工作流时尤为重要。
避坑指南:数据类型陷阱
这是新手最容易报错的地方。n8n 传入的参数有时是字符串 "100",有时是数字 100。在 Filter 节点中,字符串 "100" 和 数字 100 是不相等的。
错误示范: {{ $json.price }} > 100 (如果 price 是 "100",这行代码在某些 JS 引擎下可能报错或逻辑错误)
正确示范: 使用 parseInt() 或 Number() 强制转换类型。
代码示例:
Number($json.price) > 100
养成显式转换数据类型的习惯,能帮你省去 90% 的调试时间。
避坑指南:时区与日期格式
服务器时间通常使用 UTC,而业务逻辑可能需要本地时间。如果你在 Filter 中直接比较日期字符串,结果往往不可预测。
建议在 Filter 之前,先用一个 Code 节点或 Set 节点将时间统一转为时间戳(Timestamp)或 ISO 格式,再进行比较。例如:
{{ new Date($json.time).getTime() > 1672531200000 }}
这样可以彻底规避时区问题。
FAQ 常见问题解答
Q1:Filter 节点报错“Expression evaluation error”是什么原因?
这通常是因为你在表达式中引用了不存在的字段,或者数据类型不匹配(比如对 null 值进行数学运算)。建议先用 Debug 节点查看前一步的完整输出 JSON,确保字段路径正确。
Q2:如何实现“排除”逻辑?
很简单,使用不等于操作符 !=。例如:想要排除状态为 "pending" 的数据,设置条件为 {{ $json.status }} != "pending"。
Q3:Filter 节点太多会影响工作流性能吗?
会,但影响微乎其微。Filter 是内存级运算,速度极快。但如果你的工作流每秒处理数千次请求,建议尽量减少不必要的节点跳转,优化逻辑结构。N8N大学 的建议是:逻辑清晰比节点数量更重要。
总结与资源
掌握 Filter 节点的多条件组合,是 n8n 自动化从“能跑”进阶到“好用”的关键一步。不要害怕复杂的逻辑,通过分组和表达式,你可以构建出任何你想要的数据筛选规则。
如果你在实践中遇到更棘手的场景,欢迎访问 n8ndx.com,在 N8N大学 社区中与我们交流。自动化之路,我们结伴同行。