نود Sort در n8n
نود Sort یکی از نودهای اصلی تبدیل داده در n8n است که برای مرتبسازی آیتمهای ورودی بر اساس یک یا چند فیلد استفاده میشود. با استفاده از این نود میتوان دادهها را از کم به زیاد، از زیاد به کم یا بهصورت تصادفی مرتب کرد؛ بدون آنکه نیازی به نوشتن کد جاوااسکریپت باشد.
برای مثال، اگر فهرستی از سفارشها در اختیار داشته باشید، نود Sort میتواند سفارشها را بر اساس مبلغ، تاریخ ثبت، نام مشتری یا چند معیار همزمان مرتب کند.
معرفی نود Sort در n8n
نود Sort آیتمهای ورودی ورکفلو را دریافت میکند، ترتیب آنها را تغییر میدهد و همان آیتمها را با ترتیب جدید در خروجی قرار میدهد. این نود معمولاً محتوای فیلدهای هر آیتم را تغییر نمیدهد و فقط جایگاه آیتمها را در جریان داده جابهجا میکند.
دستهبندی نود
- دسته اصلی: Core Node یا نود داخلی n8n
- نوع عملکرد: Function / Data Transformation
- نیاز به Credential: ندارد
- کاربرد اصلی: مرتبسازی آیتمها بر اساس فیلدهای مشخص یا ایجاد ترتیب تصادفی
اهمیت نود Sort در ورکفلوها
بسیاری از سرویسها دادهها را بدون ترتیب مشخص یا با ترتیبی متفاوت از نیاز پروژه برمیگردانند. نود Sort این امکان را فراهم میکند که قبل از ارسال داده به گزارش، فایل، پایگاه داده، پیامرسان یا مرحله پردازش بعدی، ترتیب آیتمها کنترل شود.
این نود بهخصوص زمانی اهمیت دارد که اولین یا آخرین آیتم خروجی برای تصمیمگیری استفاده شود؛ برای مثال انتخاب گرانترین محصول، جدیدترین سفارش یا قدیمیترین تیکت پشتیبانی.
موارد استفاده
مرتبسازی سفارشها بر اساس مبلغ
فرض کنید نود HTTP Request یا یک نود پایگاه داده، فهرستی از سفارشها را دریافت کرده است. با انتخاب فیلد total و ترتیب نزولی، سفارشهای با مبلغ بیشتر در ابتدای خروجی قرار میگیرند.
- نود اول: PostgreSQL، MySQL، Airtable یا HTTP Request
- نود دوم: Sort با فیلد total و ترتیب Descending
- نود سوم: Limit برای نگهداشتن ۱۰ سفارش گرانتر
نمایش جدیدترین رکوردها
برای نمایش آخرین تیکتها، پیامها یا سفارشها میتوان دادهها را بر اساس فیلد تاریخ مانند createdAt بهصورت نزولی مرتب کرد. در این حالت جدیدترین آیتم در ابتدای خروجی قرار میگیرد.
مرتبسازی کاربران بر اساس نام
در ساخت گزارش یا فایل CSV، مرتبسازی کاربران بر اساس نام یا نام خانوادگی باعث خوانایی بیشتر خروجی میشود. در این سناریو، فیلد lastName با ترتیب صعودی انتخاب میشود.
اولویتبندی تیکتهای پشتیبانی
تیکتها را میتوان ابتدا بر اساس اولویت و سپس بر اساس تاریخ ایجاد مرتب کرد. برای نمونه، ابتدا تیکتهای با اولویت بالاتر نمایش داده میشوند و میان تیکتهای هماولویت، موارد قدیمیتر در ابتدای فهرست قرار میگیرند.
- معیار اول: priority با ترتیب نزولی
- معیار دوم: createdAt با ترتیب صعودی
ایجاد ترتیب تصادفی
حالت Random برای قرعهکشی، نمایش تصادفی محصولات، انتخاب نمونه آزمایشی یا تغییر ترتیب سؤالات آزمون کاربرد دارد. در این حالت هر بار اجرای ورکفلو میتواند ترتیب متفاوتی تولید کند.
ترکیب با نودهای دیگر
- HTTP Request + Sort: مرتبسازی پاسخ یک API
- Google Sheets + Sort: مرتبسازی ردیفهای دریافتشده از شیت
- Sort + Limit: استخراج چند رکورد اول یا آخر بر اساس یک معیار
- Split Out + Sort: تبدیل اعضای یک آرایه داخلی به آیتمهای مستقل و سپس مرتبسازی آنها
- Sort + Aggregate: مرتبسازی آیتمها و تبدیل دوباره آنها به یک آرایه
- Code + Sort: ساخت یک کلید محاسباتی در Code و مرتبسازی بر اساس آن
- Schedule Trigger + Database + Sort: تولید گزارش زمانبندیشده با ترتیب مشخص
پارامترها و تنظیمات
نام دقیق بعضی گزینهها ممکن است با توجه به نسخه n8n کمی متفاوت باشد، اما ساختار اصلی نود Sort شامل انتخاب روش مرتبسازی، تعریف فیلدها و تنظیم نحوه دسترسی به فیلدهای تو در تو است.
پارامتر Sort By یا Type
- نوع داده: Options
- کاربرد: تعیین روش مرتبسازی آیتمها
- مقادیر متداول: Simple یا Fields و Random
- مثال: برای مرتبسازی سفارشها بر اساس مبلغ، حالت Simple یا Fields انتخاب میشود.
حالت Simple یا Fields
در این حالت، مرتبسازی بر اساس یک یا چند فیلد انجام میشود. برای هر معیار باید نام فیلد و جهت مرتبسازی مشخص شود.
پارامتر Fields To Sort By
- نوع داده: Fixed Collection / List
- کاربرد: تعریف یک یا چند معیار مرتبسازی
- امکان افزودن چند مقدار: دارد
- مثال: مرتبسازی ابتدا بر اساس department و سپس بر اساس score
ترتیب قرار گرفتن فیلدها در این بخش مهم است. فیلد اول معیار اصلی است و فیلدهای بعدی زمانی استفاده میشوند که مقدار معیار قبلی بین چند آیتم یکسان باشد.
پارامتر Field Name
- نوع داده: String
- کاربرد: مشخصکردن نام یا مسیر فیلدی که باید بر اساس آن مرتبسازی انجام شود
- مثال ساده: price
- مثال فیلد تو در تو: customer.name
- مثال تاریخ: createdAt
نام فیلد باید با ساختار واقعی داده ورودی مطابقت داشته باشد. حروف بزرگ و کوچک نیز میتوانند اهمیت داشته باشند؛ بنابراین Price و price لزوماً یک فیلد محسوب نمیشوند.
پارامتر Order
- نوع داده: Options
- کاربرد: تعیین جهت مرتبسازی
- Ascending: مرتبسازی صعودی؛ مانند ۱ تا ۱۰، A تا Z یا قدیمی به جدید
- Descending: مرتبسازی نزولی؛ مانند ۱۰ تا ۱، Z تا A یا جدید به قدیم
- مثال: برای نمایش گرانترین محصول در ابتدای خروجی، فیلد price باید روی Descending قرار گیرد.
حالت Random
- نوع داده: انتخاب روش مرتبسازی
- کاربرد: تغییر تصادفی ترتیب تمام آیتمهای ورودی
- نیاز به Field Name: ندارد
- مثال: تغییر تصادفی ترتیب ۲۰ سؤال پیش از ارسال آنها به شرکتکنندگان
خروجی Random قطعی و تکرارپذیر نیست. اگر پروژه به قرعهکشی قابل ممیزی یا نتیجه تصادفی قابل بازتولید نیاز دارد، بهتر است یک کلید تصادفی ذخیرهشده یا الگوریتم دارای Seed در Code node استفاده شود.
پارامتر Options
بخش Options شامل تنظیمات تکمیلی نود است. مهمترین گزینهای که معمولاً در این بخش وجود دارد، Disable Dot Notation است.
گزینه Disable Dot Notation
- نوع داده: Boolean
- مقدار معمول: خاموش
- کاربرد: تعیین نحوه تفسیر نقطه در نام فیلد
- حالت خاموش: مقدار customer.name بهعنوان مسیر فیلد name درون شیء customer تفسیر میشود.
- حالت روشن: مقدار customer.name بهعنوان نام کامل یک فیلد که واقعاً دارای نقطه است در نظر گرفته میشود.
برای داده زیر، در حالت عادی باید از مسیر customer.name استفاده شود:
{ "customer": { "name": "Sara" }}
اما در داده زیر، نام واقعی کلید شامل نقطه است و باید گزینه Disable Dot Notation فعال شود:
{ "customer.name": "Sara"}
نکات مهم هنگام پیکربندی
- تمام آیتمها بهتر است فیلد مرتبسازی یکسانی داشته باشند.
- نوع داده فیلد در همه آیتمها باید یکسان باشد؛ برای مثال همه مقادیر عدد باشند، نه ترکیبی از عدد و رشته.
- عدد ذخیرهشده به شکل رشته ممکن است مانند متن مرتب شود. برای مثال ترتیب متنی مقادیر 1، 10 و 2 با ترتیب عددی آنها متفاوت است.
- تاریخها بهتر است با فرمت استاندارد ISO ۸۶۰۱ یا به شکل Timestamp ذخیره شوند.
- برای مسیرهای تو در تو، Dot Notation باید متناسب با ساختار داده فعال یا غیرفعال باشد.
- در مرتبسازی چندفیلدی، معیار اصلی باید پیش از معیارهای فرعی قرار گیرد.
- نود Sort آیتمهای ورودی را مرتب میکند و مستقیماً اعضای یک آرایه داخل یک آیتم را مرتب نمیکند.
ورودیها و خروجیها
ورودی نود Sort
ورودی این نود مجموعهای از آیتمهای n8n است. هر آیتم معمولاً دارای یک بخش JSON است و میتواند اطلاعات باینری یا متادیتای ارتباط با آیتم قبلی را نیز همراه داشته باشد.
نمونه ورودی شامل سه محصول:
[ { "json": { "name": "Keyboard", "price": 80, "stock": 12 } }, { "json": { "name": "Monitor", "price": 320, "stock": 5 } }, { "json": { "name": "Mouse", "price": 25, "stock": 30 } }]
تنظیم نمونه
- Sort By: Fields یا Simple
- Field Name: price
- Order: Descending
خروجی نود Sort
خروجی شامل همان آیتمها با ترتیب جدید است. در این مثال، محصول گرانتر در ابتدای خروجی قرار میگیرد:
[ { "json": { "name": "Monitor", "price": 320, "stock": 5 } }, { "json": { "name": "Keyboard", "price": 80, "stock": 12 } }, { "json": { "name": "Mouse", "price": 25, "stock": 30 } }]
نود Sort بهطور معمول مقدار فیلدهای JSON را تغییر نمیدهد. تعداد آیتمهای خروجی نیز با تعداد آیتمهای ورودی برابر است، مگر آنکه رفتار ورکفلو یا خطایی در دادهها مانع پردازش شود.
نمونه مرتبسازی چندمعیاره
ورودی زیر شامل کارمندانی با دپارتمان و امتیازهای متفاوت است:
[ { "json": { "name": "Ali", "department": "Sales", "score": 82 } }, { "json": { "name": "Mina", "department": "Support", "score": 91 } }, { "json": { "name": "Reza", "department": "Sales", "score": 95 } }]
برای گروهبندی مرتبشده بر اساس دپارتمان و سپس نمایش امتیاز بالاتر در هر دپارتمان، دو معیار تعریف میشود:
- department: Ascending
- score: Descending
مرتبسازی آرایه داخل یک آیتم
اگر داده ورودی فقط یک آیتم داشته باشد و رکوردها داخل آرایهای مانند products قرار گرفته باشند، Sort آن آرایه داخلی را بهصورت مستقیم مانند فهرست آیتمهای n8n مرتب نمیکند.
[ { "json": { "products": [ { "name": "Mouse", "price": 25 }, { "name": "Monitor", "price": 320 } ] } }]
برای این ساختار، جریان مناسب به شکل زیر است:
- استفاده از Split Out برای تبدیل هر عضو products به یک آیتم مستقل
- استفاده از Sort برای مرتبسازی آیتمها بر اساس price
- استفاده از Aggregate در صورت نیاز به ساخت دوباره آرایه
نکات پیشرفته و ترفندها
استخراج رکورد بیشینه یا کمینه
ترکیب Sort و Limit راه سادهای برای استخراج بزرگترین یا کوچکترین مقدار است.
- برای بیشترین مقدار: مرتبسازی نزولی و Limit برابر ۱
- برای کمترین مقدار: مرتبسازی صعودی و Limit برابر ۱
- مثال: انتخاب پرفروشترین محصول بر اساس فیلد sales
ساخت کلید مرتبسازی سفارشی
گاهی مقدار قابل مرتبسازی مستقیماً در داده وجود ندارد. در این شرایط میتوان با Edit Fields یا Code یک فیلد کمکی ایجاد کرد و سپس Sort را روی آن اجرا کرد.
برای مثال، اگر اولویتها به شکل متنهای low، medium و high ذخیره شدهاند، مرتبسازی الفبایی ترتیب تجاری مورد انتظار را ایجاد نمیکند. میتوان فیلد عددی priorityRank ساخت:
{ "low": 1, "medium": 2, "high": 3}
سپس مرتبسازی نزولی بر اساس priorityRank باعث میشود اولویت high در ابتدای خروجی قرار گیرد.
نرمالسازی عددها پیش از Sort
اگر عددها بهصورت رشته دریافت شدهاند، بهتر است پیش از مرتبسازی به Number تبدیل شوند. این تبدیل با Edit Fields یا Code node قابل انجام است.
const value = Number($json.price);
رشتههایی مانند 1,250 یا مقادیر دارای واحد پول باید ابتدا پاکسازی شوند؛ زیرا تبدیل مستقیم آنها ممکن است مقدار نامعتبر تولید کند.
نرمالسازی تاریخها
برای تاریخهایی با قالبهای مختلف، یک فیلد Timestamp کمکی ایجاد کنید. تاریخهای استاندارد مانند 2026-07-23T10:30:00Z برای مرتبسازی و پردازش قابلاعتمادتر از قالبهای محلی هستند.
مرتبسازی بر اساس مقدار تو در تو
برای ساختارهای تو در تو میتوان از مسیر نقطهای استفاده کرد:
{ "customer": { "profile": { "score": 88 } }}
مسیر مرتبسازی این مقدار برابر است با:
customer.profile.score
انتقال مرتبسازی به پایگاه داده
برای حجم زیاد داده، مرتبسازی در خود پایگاه داده معمولاً کارآمدتر است. بهجای دریافت صدها هزار رکورد و مرتبسازی آنها در n8n، میتوان از دستورهایی مانند ORDER BY و LIMIT در SQL استفاده کرد.
SELECT *FROM ordersORDER BY total DESCLIMIT 10;
این روش مصرف حافظه، زمان انتقال داده و بار پردازشی n8n را کاهش میدهد.
مرتبسازی پس از Merge
پس از ترکیب چند شاخه با Merge، ترتیب آیتمها ممکن است برای گزارش نهایی مناسب نباشد. قراردادن Sort بعد از Merge یک ترتیب نهایی و قابلکنترل ایجاد میکند.
پردازش گروهی و ترتیب داده
اگر آیتمها به چند Batch تقسیم شوند، مرتبسازی داخل هر Batch لزوماً به معنی مرتببودن کل مجموعه نیست. برای دستیابی به ترتیب سراسری، تمام آیتمها باید پیش از Sort در یک جریان داده جمع شوند. در دادههای بسیار بزرگ بهتر است عملیات مرتبسازی به منبع داده منتقل شود.
حذف فیلد کمکی پس از مرتبسازی
اگر برای Sort یک فیلد محاسباتی مانند sortKey ساخته شده است، میتوان بعد از مرتبسازی با Edit Fields آن را از خروجی حذف کرد تا ساختار نهایی تمیز باقی بماند.
محدودیتها و خطاها
مصرف حافظه در دادههای حجیم
برای مرتبسازی، مجموعه آیتمها باید برای مقایسه در دسترس باشد. در نتیجه مرتبسازی تعداد بسیار زیاد آیتم میتواند حافظه و زمان پردازش قابلتوجهی مصرف کند.
راهحل: استفاده از مرتبسازی سمت پایگاه داده یا API، محدودکردن رکوردها و فیلترکردن دادهها پیش از Sort.
وجود نوعهای داده متفاوت
اگر یک فیلد در بعضی آیتمها Number و در بعضی آیتمها String باشد، ترتیب خروجی ممکن است مطابق انتظار نباشد.
راهحل: تبدیل تمام مقادیر به یک نوع داده مشترک پیش از Sort.
نبودن فیلد در برخی آیتمها
ممکن است بعضی آیتمها فیلد انتخابشده را نداشته باشند یا مقدار آنها null باشد. جایگاه این آیتمها میتواند با توجه به نوع داده و نسخه نود متفاوت باشد.
راهحل: پیش از Sort با Filter آیتمهای ناقص را جدا کنید یا با Edit Fields یک مقدار پیشفرض تعریف کنید.
مرتبسازی نادرست عددهای رشتهای
مقادیر “2”، “10” و “100” رشته هستند و ممکن است بر اساس ترتیب متنی مقایسه شوند.
راهحل: تبدیل مقدار به Number پیش از مرتبسازی.
مرتبسازی نادرست تاریخها
تاریخهای محلی مانند 07/08/2026 مبهم هستند و ممکن است در سیستمهای مختلف تفسیر متفاوتی داشته باشند.
راهحل: تبدیل تاریخها به ISO ۸۶۰۱ یا Unix Timestamp.
اشتباه در Dot Notation
اگر نام واقعی یک کلید دارای نقطه باشد، n8n ممکن است آن را بهعنوان مسیر تو در تو تفسیر کند. از طرف دیگر، فعالکردن Disable Dot Notation برای یک مسیر تو در تو نیز مانع دسترسی صحیح به مقدار میشود.
راهحل: ساختار JSON را در پنل Input بررسی و گزینه Disable Dot Notation را متناسب با ساختار تنظیم کنید.
انتظار مرتبسازی آرایه داخلی
Sort روی آیتمهای ورودی کار میکند، نه روی اعضای آرایهای که داخل یک آیتم قرار گرفتهاند.
راهحل: استفاده از Split Out، سپس Sort و در صورت نیاز Aggregate.
ترتیب حروف فارسی و تفاوتهای زبانی
مرتبسازی متن ممکن است همیشه با قواعد فرهنگ لغت فارسی، تفاوت «ی» و «ی»، تفاوت «ک» و «ک» یا نیمفاصله هماهنگ نباشد.
راهحل: متنها را پیش از Sort نرمالسازی کنید. برای مرتبسازی کاملاً وابسته به زبان و Locale، استفاده از Code node و روشهایی مانند localeCompare با Locale مناسب میتواند کنترل بیشتری فراهم کند.
غیرقابلتکرار بودن حالت Random
حالت Random معمولاً در هر اجرا ترتیب متفاوتی ایجاد میکند و برای سناریوهایی که باید نتیجه دقیقاً بازتولید شود مناسب نیست.
راهحل: تولید و ذخیره یک کلید تصادفی برای هر رکورد یا استفاده از الگوریتم تصادفی Seedدار در Code node.
اشتباه در اولویت فیلدهای چندگانه
قرار دادن معیار فرعی قبل از معیار اصلی میتواند خروجی نامناسبی ایجاد کند.
راهحل: معیارها را به ترتیب اهمیت تعریف کنید؛ فیلد اول بالاترین اولویت را دارد.
ایدهها
- رتبهبندی روزانه فروشندگان: دریافت آمار فروش، مرتبسازی نزولی بر اساس مبلغ فروش و ارسال سه رتبه اول به Slack یا Telegram.
- صف هوشمند پشتیبانی: ساخت امتیاز ترکیبی از اولویت، مدت انتظار و نوع مشتری و سپس مرتبسازی تیکتها بر اساس امتیاز نهایی.
- قرعهکشی خودکار: دریافت شرکتکنندگان از Google Sheets، تغییر ترتیب با Random و انتخاب چند نفر اول با Limit.
- گزارش محصولات کمموجودی: فیلتر محصولات فعال، مرتبسازی صعودی بر اساس موجودی و ثبت موارد بحرانی در یک گزارش.
- خوراک محتوای شخصیسازیشده: محاسبه امتیاز هر محتوا بر اساس تازگی و علاقه کاربر، سپس مرتبسازی نزولی برای تولید فید.
