【n8n教程】:Sort节点,数据排序的秘诀

在处理自动化工作流时,您经常会遇到需要整理数据的情况。无论是按价格排列产品、按日期组织事件,还是随机打乱列表,Sort节点都是您的得力助手。本教程将帮助您快速上手n8n的Sort节点,学会如何灵活运用三种排序方式。


什么是Sort节点?

Sort节点用于组织和重新排列数据列表。它基于JavaScript的Array.sort()方法,支持三种排序模式:

核心概念

Sort节点在处理数组数据时,会将元素转换为字符串进行字典序比较。例如,数字"100"会排在"2"前面(因为"1"小于"2")。因此,正确配置字段类型很关键


三种排序模式详解

1. Simple(简单排序)- 最常用

何时使用:当您需要按一个或多个字段进行标准的升序/降序排列时

配置步骤

  1. 1. 在Sort节点中,选择 Type → Simple
  2. 2. 点击 Add Field To Sort By 按钮
  3. 3. 输入要排序的 字段名称(例如:pricenamecreatedAt
  4. 4. 选择排序顺序:
    • Ascending(升序):从小到大、从A到Z
    • Descending(降序):从大到小、从Z到A

进阶选项

示例:按价格升序排列产品


    
    
    
  字段名:price
顺序:Ascending
结果:最便宜的产品排在最前

2. Random(随机排序)

何时使用:当您需要随机打乱列表顺序时,常用于测试或随机抽样

配置步骤

  1. 1. 选择 Type → Random
  2. 2. 直接运行工作流
  3. 3. 每次执行都会产生不同的随机顺序

实用场景

3. Code(代码排序)- 高级功能

何时使用:需要实现复杂的排序逻辑,例如按多个条件排序或自定义排序规则

配置步骤

  1. 1. 选择 Type → Code
  2. 2. 在代码框中编写JavaScript排序逻辑
  3. 3. 必须返回排序后的数组

常见代码模式

按数字字段排序:


    
    
    
  const sortedArr = items.sort((a, b) => {
  return
 a.json.price - b.json.price;
});
return
 sortedArr;

按字符串字段排序:


    
    
    
  const sortedArr = items.sort((a, b) => {
  let
 a_name = a.json.name.toLowerCase();
  let
 b_name = b.json.name.toLowerCase();
  if
 (a_name < b_name) return -1;
  if
 (a_name > b_name) return 1;
  return
 0;
});
return
 sortedArr;

实战案例:电商产品排序工作流

下面是一个完整的可执行工作流,展示如何使用Sort节点对产品数据进行排序。

场景

一个电商平台需要:

  1. 1. 获取产品列表(包含名称和价格)
  2. 2. 按价格升序排列
  3. 3. 提取前3个最便宜的产品

工作流JSON代码

将以下JSON代码复制到n8n中(使用 Import from File 或直接粘贴到画布上):


    
    
    
  {
  "name"
: "电商产品排序工作流",
  "nodes"
: [
    {

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

      "parameters"
: {
        "functionCode"
: "return [\n  { json: { name: 'Gaming Laptop', price: 1200, category: 'Electronics' } },\n  { json: { name: 'Wireless Mouse', price: 45, category: 'Accessories' } },\n  { json: { name: '4K Monitor', price: 399, category: 'Electronics' } },\n  { json: { name: 'Mechanical Keyboard', price: 150, category: 'Accessories' } },\n  { json: { name: 'USB-C Hub', price: 89, category: 'Accessories' } },\n  { json: { name: 'Laptop Stand', price: 65, category: 'Accessories' } }\n];"
      }
,
      "name"
: "Code - 产品数据",
      "type"
: "n8n-nodes-base.code",
      "typeVersion"
: 1,
      "position"
: [450, 300]
    }
,
    {

      "parameters"
: {
        "type"
: "simple",
        "fields"
: [
          {

            "name"
: "price",
            "order"
: "asc"
          }

        ]

      }
,
      "name"
: "Sort - 按价格升序",
      "type"
: "n8n-nodes-base.sort",
      "typeVersion"
: 1,
      "position"
: [650, 300]
    }
,
    {

      "parameters"
: {
        "operation"
: "limit",
        "maxItems"
: 3,
        "keep"
: "first"
      }
,
      "name"
: "Limit - 只保留前3个",
      "type"
: "n8n-nodes-base.limit",
      "typeVersion"
: 1,
      "position"
: [850, 300]
    }

  ]
,
  "connections"
: {
    "Manual"
: {
      "main"
: [
        [

          {

            "node"
: "Code - 产品数据",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "Code - 产品数据"
: {
      "main"
: [
        [

          {

            "node"
: "Sort - 按价格升序",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "Sort - 按价格升序"
: {
      "main"
: [
        [

          {

            "node"
: "Limit - 只保留前3个",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }

  }

}

工作流执行步骤

  1. 1. Manual Trigger(手动触发器)
    • • 点击"Execute Workflow"启动工作流
  2. 2. Code Node - 产品数据
    • • 生成样本产品数据(包含名称、价格、分类)
  3. 3. Sort Node - 按价格升序
    • • 字段名:price
    • • 顺序:Ascending
    • • 结果:产品按价格从低到高排列
  4. 4. Limit Node - 只保留前3个
    • • 最大项目数:3
    • • 保留方式:first
    • • 结果:只显示最便宜的3个产品

预期输出


    
    
    
  [
  {
 "name": "Wireless Mouse", "price": 45, "category": "Accessories" },
  {
 "name": "Laptop Stand", "price": 65, "category": "Accessories" },
  {
 "name": "USB-C Hub", "price": 89, "category": "Accessories" }
]

进阶技巧

按多个字段排序

当您需要按多个条件排序(如先按分类,再按价格)时:


    
    
    
  {
  "type"
: "simple",
  "fields"
: [
    {

      "name"
: "category",
      "order"
: "asc"
    }
,
    {

      "name"
: "price",
      "order"
: "asc"
    }

  ]

}

规则:列表中第一个字段优先排序,如果出现相同值,则按第二个字段排序,以此类推。

处理日期排序

对于日期字段,建议使用Code模式确保准确性:


    
    
    
  const sortedArr = items.sort((a, b) => {
  const
 dateA = new Date(a.json.createdAt);
  const
 dateB = new Date(b.json.createdAt);
  return
 dateB - dateA; // 最新的日期优先
});
return
 sortedArr;

结合IF节点实现条件排序


    
    
    
  IF条件检查 → 不同排序规则 → 合并结果

根据不同条件应用不同的排序方式,增强工作流的智能性。


常见问题解决

问题1:数字排序不正确

症状[1, 10, 2, 20] 而不是 [1, 2, 10, 20]

原因:数据被作为字符串比较

解决:在Code模式中使用数字比较


    
    
    
  items.sort((a, b) => a.json.price - b.json.price)

问题2:嵌套字段无法排序

症状:无法按 user.name 排序

解决:确保"Disable Dot Notation"未被开启(保持默认),或在Code模式中访问嵌套属性:


    
    
    
  items.sort((a, b) => {
  return
 a.json.user.name.localeCompare(b.json.user.name);
})

问题3:排序后数据丢失

原因:Sort节点只重新排列,不修改数据结构

检查:确认前一个节点正确输出了所有数据


最佳实践

务必做的事

避免做的事


总结

模式最佳场景复杂度
Simple单字段或少数字段排序
Random数据随机化
Code自定义逻辑、复杂条件

通过本教程,您已经掌握了n8n Sort节点的核心用法。现在可以在您的工作流中灵活应用,构建更加智能的数据处理系统!


官方文档[1]
n8n系列教程[2]

引用链接

[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sort/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#