n8n Filter节点过滤多个条件:多条件组合逻辑与实战技巧

2026-02-23 8 0

别让无效数据淹没你的工作流

在自动化构建这条路上,笔者见过太多新手把 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)”功能。

操作路径如下:

  1. 拖入 Filter 节点,连接你的数据源。
  2. 点击 **Rules** 下方的 **Add Condition**,设置第一条规则(如:金额 > 100)。
  3. 点击规则右侧的 **AND** 图标,选择 **OR**,此时会出现一个逻辑组。
  4. 在这个逻辑组内,添加你的“或”条件(如:用户等级 = 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 逻辑,只要最终返回 truefalse

实战技巧与避坑指南

懂了原理只是第一步,实战中还有不少“暗礁”。以下是 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大学 社区中与我们交流。自动化之路,我们结伴同行。

相关文章

n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决
当n8n流程意外中断,Error Handling节点如何配置才能优雅降级?
n8n Error Handling节点和Try/Catch节点,到底该怎么选?

发布评论