别再只会做“是或否”了,你的 n8n 自动化水平取决于 Filter 节点的玩法
笔者在 N8N大学 这些年,看过太多学员的 Workflows。最常见的现象是什么?Webhook 接到数据,直接一路推到底,最后不仅处理速度慢,还经常因为数据格式不对导致整个流程报错。
很多人以为 n8n 的 Filter 节点只是个简单的开关,只能做 AND 或 OR 的判断。这就像开着法拉利去买菜,太浪费了。
今天,笔者不讲基础概念,直接上硬货。我们通过 5 个实战案例,把 Filter 节点的高级用法拆解得明明白白。学会这些,你的自动化流程不仅能跑通,还能跑得稳、跑得快。
实战一:多条件组合查询(AND/OR 混合逻辑)
很多新手一遇到“既要又要还要”的需求就头大。比如:我们需要筛选出“状态是已支付”且“金额大于 100 元”或“用户等级是 VIP”的订单。
在 Filter 节点中,你可以通过组合规则来实现复杂的筛选逻辑。
- 规则 1:
状态等于已支付 - 规则 2:
金额大于100 - 规则 3:
用户等级等于VIP
关键在于逻辑设置。如果你的需求是“满足条件1,且(满足条件2或满足条件3)”,你需要利用 Combine 选项。默认是 AND(且),你可以将前两条设为 AND,然后第三条单独处理。更简单的做法是:如果只需要满足其中一组条件,直接使用 OR 作为全局逻辑即可。这在处理电商数据清洗时,能帮你瞬间过滤掉 90% 的无效订单。
实战二:处理嵌套对象数据(JSON 深度解析)
这是 N8N大学 学员最容易踩坑的地方。n8n 的数据流是 JSON 结构,当你接收到 API 返回的数据时,字段往往藏得很深。
比如一个 Webhook 接收的 JSON 数据如下:
{
"user": {
"profile": {
"email": "test@example.com",
"is_active": true
}
}
}
你想过滤出“已激活用户”。在 Filter 节点中,直接写 user.is_active 是无法识别的。你必须使用 n8n 的原生表达式语法。
在条件设置中,点击输入框右侧的 fx 图标,输入:
{{ $('JSON').item.json.user.profile.is_active }}
或者更通用的写法:
{{ $json.user.profile.is_active }}这样,你就能精准地抓取到深层节点的数据进行判断。记住,Filter 节点是处理脏数据的第一道防线,把它用好,能避免后续流程因字段缺失而崩溃。
实战三:数组及集合的过滤(Filter Fields 模式)
当你的数据是一组列表(比如 Excel 读取进来的多行数据,或者 API 返回的数组),情况就变得复杂了。默认情况下,n8n 会把数组拆分成多条数据流,但如果你想在一条数据流里判断整个数组的属性呢?
这里我们用到 Filter Fields 模式。
假设我们有一组商品数据,结构如下:
{ "products": [ { "name": "iPhone", "price": 6000 }, { "name": "Charger", "price": 50 } ] }我们的目标是:只保留价格大于 1000 的商品。这在单纯的 Filter 节点里很难直接完成(通常需要配合 Split Out 或 Aggregate 节点)。
但在高级过滤中,我们可以利用 Collection 属性。
- 将 Filter 节点设置为 Filter Fields (Mode)。
- 选择 Keep(保留)。
- 字段路径输入:
products。- 在值(Value)处使用表达式进行判断(这一步通常需要配合 JavaScript Code 节点预处理,但在简单场景下,Filter 可用于判断数组长度或是否存在特定元素)。
更实用的场景是:判断数组是否为空。条件设为:
productsis not empty。这在处理“有附件才发送邮件”的场景中非常关键。实战四:基于时间戳的动态过滤(日期比较)
时间处理是自动化里的“重灾区”。时区、格式、时间戳,稍有不慎就会导致流程在错误的时间触发。
假设我们有一个每天运行的流程,只处理“最近 24 小时内”产生的数据。数据里带有一个
created_at字段,格式为 ISO 8601(如2023-10-27T10:00:00Z)。在 Filter 节点中,我们可以这样设置:
- 条件:
created_at大于{{ $now.minus({ hours: 24 }).toISO() }}
这里用到了 n8n 强大的时间处理函数。如果你的 n8n 运行在 Docker 中,务必注意时区设置。默认容器时间往往是 UTC,如果你的数据是北京时间(UTC+8),直接比较会出错。
避坑指南:在 Docker 运行 n8n 时,建议在环境变量中设置 TZ=Asia/Shanghai,这样 {{ $now }} 才能准确获取本地时间,避免过滤逻辑出现 8 小时的偏差。
实战五:正则表达式(Regex)的精准打击
当标准的“等于”、“包含”无法满足需求时,正则表达式就是你的终极武器。比如,你想筛选出所有以特定前缀开头的 ID,或者验证邮箱格式。
在 Filter 节点的规则中,将比较方式从 String 切换为 Regex。
案例:筛选出所有以 ORD- 开头,且后面跟 8 位数字的订单号。
- 字段:
order_id - 正则表达式:
^ORD-d{8}$
这个功能在清洗用户输入的数据时极其有用。例如,从一大段文本中提取电话号码,或者过滤掉带有恶意脚本字符的评论。
但请注意,正则表达式性能开销相对较大。如果数据量达到几万条,建议先用其他手段(如数据库查询)过滤掉大部分数据,再在 n8n 中使用 Regex 进行精细清洗。
FAQ:关于 n8n Filter 节点的常见疑问
Q1: Filter 节点处理大量数据时会卡顿吗?
A: 如果是单次流程处理几万条数据,Filter 节点本身很快,因为它只是内存中的逻辑判断。但如果你的流程是“持续运行”的,数据积压会导致内存占用升高。建议使用 n8n 的 Queue Mode(队列模式)来分担压力。
Q2: 为什么我的表达式在 Filter 里报错?
A: 最常见的原因是引用了不存在的字段。在输入框输入表达式时,n8n 会自动提示。确保你引用的路径(如 {{ $json.field }})在上一步的数据中确实存在。如果字段可能为空,建议先用 IF 节点兜底,或者在表达式中使用 {{ $json.field || 'default' }}。
Q3: Filter 节点能否修改数据?
A: 不能。Filter 节点的唯一职责是“放行”或“拦截”。如果你需要清洗数据(例如把“男”改成“M”),需要配合 Set 节点或 Edit Fields 节点使用。
总结与资源
Filter 节点看似简单,实则是 n8n 自动化流程中的“质检员”。掌握这五种高级用法,能让你的流程从“能跑”进化到“稳健”。
在 N8N大学,我们始终强调:自动化不是为了炫技,而是为了解决实际问题。多在实战中尝试组合不同的逻辑,你会发现 n8n 的潜力远超想象。
如果你在实战中遇到了棘手的数据过滤问题,欢迎在 N8N大学 社区发帖,笔者会亲自为你解答。