【n8n教程】:Remove Duplicates节点,清洁重复数据

📌 什么是Remove Duplicates节点?

Remove Duplicates(删除重复项)是n8n中的一个核心节点,用于识别和删除重复数据。它特别适用于以下场景:

该节点支持三种操作模式,可以处理单次执行内的重复项,也可以对比历次执行的数据。


🎯 三大操作模式

Remove Duplicates节点提供三种操作模式:

1️⃣ 移除当前输入中的重复项(最常用)

Remove Items Repeated Within Current Input

适用场景

2️⃣ 移除历次执行中处理过的项目

Remove Items Processed in Previous Executions

适用场景

3️⃣ 清除重复数据历史

Clear Deduplication History

适用场景


🔧 核心参数详解

模式一:移除当前输入中的重复项

参数:Compare(比较方式)

选项说明示例
All Fields对比所有字段所有字段都相同才算重复
All Fields Except排除某些字段排除ID字段后相同就算重复
Selected Fields仅对比指定字段只检查name和email字段

选项:Remove Other Fields(删除其他字段)

使用场景


    
    
    
  ✅ 开启:只关心去重字段,不需要其他信息
❌ 关闭:需要保留所有原始数据

模式二:移除历次执行的重复项

参数:Keep Items Where(保留策略)

Value Is New


    
    
    
  条件:项目是新的(未在历史中出现过)
适用:邮箱/ID等唯一标识
输入:{{ $json.email }}

Value Is Higher than Any Previous Value


    
    
    
  条件:当前值 > 历史最大值
适用:订单号、用户ID等递增值
输入:{{ $json.order_id }}

Value Is a Date Later than Any Previous Date


    
    
    
  条件:当前日期 > 历史最新日期
适用:时间戳、更新时间
输入:{{ $json.last_updated }}

参数:Scope(作用域)

选项说明
Node去重数据仅作用于当前节点
Workflow去重数据在整个工作流中共享

参数:History Size(历史大小)


💡 实战案例:从邮件列表中去重

场景描述

你有一个订阅列表,用户可能多次提交,需要去除重复的邮箱地址。

工作流结构


    
    
    
  Manual Trigger → Code(生成测试数据)→ Split Out → 
Remove Duplicates(去重)→ Set(字段处理)→ Webhook

可执行工作流代码


    
    
    
  {
  "nodes"
: [
    {

      "parameters"
: {},
      "id"
: "1a2b3c4d",
      "name"
: "Manual Trigger",
      "type"
: "n8n-nodes-base.manualTrigger",
      "typeVersion"
: 1,
      "position"
: [250, 300]
    }
,
    {

      "parameters"
: {
        "mode"
: "runOnceForEachItem",
        "jsCode"
: "let data = []; return { data: [\n  { id: 1, email: 'user1@example.com', name: 'Alice', signup_date: '2024-09-20T10:00:00.000Z' },\n  { id: 2, email: 'user2@example.com', name: 'Bob', signup_date: '2024-09-21T10:00:00.000Z' },\n  { id: 3, email: 'user1@example.com', name: 'Alice', signup_date: '2024-09-20T10:00:00.000Z' },\n  { id: 4, email: 'user3@example.com', name: 'Charlie', signup_date: '2024-09-22T10:00:00.000Z' },\n  { id: 5, email: 'user2@example.com', name: 'Bob Smith', signup_date: '2024-09-21T11:00:00.000Z' }\n] }"
      }
,
      "id"
: "code-node-123",
      "name"
: "Code - 生成测试数据",
      "type"
: "n8n-nodes-base.code",
      "typeVersion"
: 2,
      "position"
: [450, 300]
    }
,
    {

      "parameters"
: {
        "fieldToSplitOut"
: "data"
      }
,
      "id"
: "split-node-456",
      "name"
: "Split Out - 分离数组",
      "type"
: "n8n-nodes-base.splitOut",
      "typeVersion"
: 1,
      "position"
: [650, 300]
    }
,
    {

      "parameters"
: {
        "operation"
: "removeItemsRepeatedWithinCurrentInput",
        "compare"
: "selectedFields",
        "fieldsToCompare"
: ["email"],
        "disableDotNotation"
: false,
        "removeOtherFields"
: false
      }
,
      "id"
: "remove-dup-789",
      "name"
: "Remove Duplicates - 按邮箱去重",
      "type"
: "n8n-nodes-base.removeduplicates",
      "typeVersion"
: 1,
      "position"
: [850, 300]
    }
,
    {

      "parameters"
: {
        "assignments"
: {
          "assignments"
: [
            {

              "id"
: "field1",
              "name"
: "duplicate_status",
              "value"
: "=unique"
            }

          ]

        }

      }
,
      "id"
: "set-node-101",
      "name"
: "Set - 添加标记",
      "type"
: "n8n-nodes-base.set",
      "typeVersion"
: 3,
      "position"
: [1050, 300]
    }

  ]
,
  "connections"
: {
    "Manual Trigger"
: {
      "main"
: [[{ "node": "Code - 生成测试数据", "branch": 0, "type": "main" }]]
    }
,
    "Code - 生成测试数据"
: {
      "main"
: [[{ "node": "Split Out - 分离数组", "branch": 0, "type": "main" }]]
    }
,
    "Split Out - 分离数组"
: {
      "main"
: [[{ "node": "Remove Duplicates - 按邮箱去重", "branch": 0, "type": "main" }]]
    }
,
    "Remove Duplicates - 按邮箱去重"
: {
      "main"
: [[{ "node": "Set - 添加标记", "branch": 0, "type": "main" }]]
    }

  }

}

预期输出

输入了5条记录,其中有2条重复邮箱(user1@example.com[1]user2@example.com[2]各重复1次):

idemailnamesignup_date
1user1@example.com[1]Alice2024-09-20T10:00:00.000Z
2user2@example.com[2]Bob2024-09-21T10:00:00.000Z
4user3@example.com[3]Charlie2024-09-22T10:00:00.000Z

结果:从5条减少到3条,成功去重!


🎓 快速上手步骤

Step 1:添加节点

  1. 1. 在画布上添加 Manual Trigger(手动触发)
  2. 2. 添加 Code 节点生成测试数据
  3. 3. 添加 Split Out 节点(如果是数组需要分离)
  4. 4. 添加 Remove Duplicates 节点

Step 2:配置Remove Duplicates

  1. 1. 打开节点设置
  2. 2. 选择 Operation:选择 Remove Items Repeated Within Current Input
  3. 3. 选择 Compare:选择 Selected Fields
  4. 4. 输入 Fields To Compareemail 或你要去重的字段

Step 3:运行测试

  1. 1. 点击 Execute Workflow
  2. 2. 查看输出结果
  3. 3. 调整参数直到满足需求

Step 4:添加后续节点

连接到你需要的节点,如:


⚠️ 常见坑点

坑1:嵌套字段的比较

错误:直接输入 user.email
正确:启用 Disable Dot Notation,然后输入 user.email

坑2:忘记Split Out

错误:数组数据直接连接到Remove Duplicates
正确:先用 Split Out 分离数组成单个项

坑3:历史数据持久化

错误:测试后忘记清除历史,导致第二次运行没有新数据
正确:使用 Clear Deduplication History 清空或选择合适的 Scope

坑4:混淆两种模式

错误:需要跨执行去重,却用了 Remove Items Repeated Within Current Input
正确:跨执行去重用 Remove Items Processed in Previous Executions


🚀 进阶技巧

组合去重字段

有时需要按多个字段组合去重:


    
    
    
  Fields To Compare: email,name,company

这样只有email、name、company三个字段都完全相同才会被认为是重复。

使用表达式动态指定字段


    
    
    
  {{ $json.userId }}_{{ $json.timestamp }}

组合多个字段值创建唯一标识。

连接多个Remove Duplicates节点

对于需要同时处理当前执行和历史执行的重复,可以:

  1. 1. 第一个Remove Duplicates:Remove Items Repeated Within Current Input
  2. 2. 第二个Remove Duplicates:Remove Items Processed in Previous Executions

✨ 总结

Remove Duplicates是n8n中必不可少的数据清洁工具

需求使用模式
清理单次数据中的重复Remove Items Repeated Within Current Input
防止跨执行的重复处理Remove Items Processed in Previous Executions
重新开始去重过程Clear Deduplication History

掌握这个节点,你就能构建更加健壮、干净、高效的自动化工作流!🎉


引用链接

[1] user1@example.com: mailto:user1@example.com
[2] user2@example.com: mailto:user2@example.com
[3] user3@example.com: mailto:user3@example.com
[4] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.removeduplicates/
[5] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#