نود Remove Duplicates در N8N
نود Remove Duplicates در N8N یکی از نودهای کاربردی برای پاکسازی دادههاست. این نود آیتمهای تکراری را از ورودی حذف میکند و فقط رکوردهای یکتا را به مرحله بعدی ورکفلو میفرستد. در بسیاری از اتوماسیونها، دادهها از منابع مختلفی مثل فرمها، گوگل شیت، CRM، وبهوکها یا APIها وارد میشوند و احتمال تکراری بودن آنها زیاد است. این نود کمک میکند قبل از ذخیرهسازی، ارسال ایمیل، ایجاد مخاطب یا پردازشهای بعدی، دادههای تکراری حذف شوند.
معرفی نود در N8N
نود Remove Duplicates یک نود پردازش داده در N8N است که روی مجموعهای از آیتمهای ورودی اجرا میشود و آیتمهایی را که بر اساس معیارهای مشخصشده تکراری هستند حذف میکند.
- نام نود: Remove Duplicates
- دستهبندی: Core Node / Data Transformation
- نوع عملکرد: Action / Function
- Trigger نیست: این نود خودش اجراکننده ورکفلو نیست و باید بعد از یک Trigger یا نود تولیدکننده داده قرار بگیرد.
- Integration نیست: به سرویس خارجی متصل نمیشود، بلکه دادههای موجود در ورکفلو را پردازش میکند.
کار اصلی این نود، مقایسه آیتمها با یکدیگر و حذف موارد تکراری است. شما میتوانید تعیین کنید که مقایسه بر اساس همه فیلدها انجام شود، فقط بعضی فیلدها بررسی شوند یا بعضی فیلدها از مقایسه کنار گذاشته شوند.
اهمیت این نود در ورکفلوها زمانی مشخص میشود که با دادههای حجیم یا چندمنبعی کار میکنید. برای مثال، ممکن است یک مخاطب هم از فرم سایت وارد شود، هم از فایل CSV و هم از یک CRM. اگر قبل از ایجاد مخاطب جدید دادهها را پاکسازی نکنید، ممکن است رکوردهای تکراری در سیستم مقصد ایجاد شود.
موارد استفاده
حذف ایمیلهای تکراری قبل از ارسال کمپین
فرض کنید لیستی از ایمیلها را از Google Sheets دریافت کردهاید و میخواهید برای آنها ایمیل ارسال کنید. اگر یک ایمیل چند بار در لیست وجود داشته باشد، کاربر چند ایمیل مشابه دریافت میکند. با نود Remove Duplicates میتوانید بر اساس فیلد email فقط یک آیتم از هر ایمیل نگه دارید.
- Google Sheets: خواندن لیست مخاطبان
- Remove Duplicates: حذف رکوردهای تکراری بر اساس email
- Send Email یا Gmail: ارسال ایمیل فقط به مخاطبان یکتا
جلوگیری از ثبت لید تکراری در CRM
در سیستمهای فروش، لیدهای تکراری باعث سردرگمی تیم فروش و گزارشهای اشتباه میشوند. اگر لیدها از فرم سایت، تبلیغات و APIهای مختلف وارد شوند، میتوانید قبل از ارسال به CRM، آنها را با Remove Duplicates بر اساس شماره موبایل یا ایمیل یکتا کنید.
- Webhook: دریافت لید از فرم سایت
- Merge: ترکیب لیدهای چند منبع
- Remove Duplicates: حذف لیدهای تکراری بر اساس phone یا email
- HubSpot / Salesforce / Pipedrive: ایجاد لید جدید
پاکسازی محصولات تکراری در فایل CSV
در فروشگاههای اینترنتی، گاهی فایل محصولات شامل SKUهای تکراری است. قبل از وارد کردن محصولات به دیتابیس یا فروشگاه، میتوانید آیتمهای تکراری را بر اساس فیلد sku حذف کنید.
- Read Binary File: دریافت فایل CSV
- Spreadsheet File: تبدیل CSV به آیتمهای JSON
- Remove Duplicates: حذف محصولات تکراری بر اساس sku
- HTTP Request یا Database: ثبت محصولات یکتا
حذف رویدادهای تکراری Webhook
برخی سرویسها ممکن است یک Webhook را چند بار ارسال کنند، مخصوصاً زمانی که پاسخ سرور دیر برسد یا سرویس مبدأ مکانیزم retry داشته باشد. اگر هر رویداد دارای یک شناسه مانند event_id باشد، میتوانید با Remove Duplicates از پردازش چندباره رویداد جلوگیری کنید.
- Webhook: دریافت رویداد
- Remove Duplicates: حذف رویدادهای تکراری بر اساس event_id
- IF: بررسی نوع رویداد
- Slack / Telegram / Database: ارسال پیام یا ذخیرهسازی
یکسانسازی دادهها بعد از ترکیب چند منبع
وقتی دادهها از چند منبع مختلف با نودهایی مثل Merge، HTTP Request، Google Sheets و Airtable ترکیب میشوند، احتمال وجود دادههای تکراری بسیار بالاست. Remove Duplicates معمولاً بعد از مرحله ترکیب دادهها قرار میگیرد تا خروجی نهایی تمیز و یکتا باشد.
پارامترها و تنظیمات
تنظیمات نود Remove Duplicates ساده است، اما انتخاب درست معیار مقایسه اهمیت زیادی دارد. اگر معیار مقایسه اشتباه انتخاب شود، ممکن است دادههای واقعاً متفاوت حذف شوند یا دادههای تکراری باقی بمانند.
پارامتر Compare
| نام پارامتر | نوع داده | توضیح کاربرد | مثال عملی |
|---|---|---|---|
| Compare | Options | مشخص میکند که نود برای تشخیص تکراری بودن آیتمها از چه فیلدهایی استفاده کند. | برای حذف مخاطبان تکراری، گزینه Selected Fields را انتخاب کنید و فیلد email را وارد کنید. |
گزینههای رایج در بخش Compare شامل موارد زیر هستند:
- All Fields: همه فیلدهای هر آیتم با آیتمهای دیگر مقایسه میشوند. فقط زمانی دو آیتم تکراری محسوب میشوند که تمام فیلدهای آنها مشابه باشد.
- All Fields Except: همه فیلدها مقایسه میشوند، بهجز فیلدهایی که شما مشخص میکنید. این گزینه زمانی مفید است که بعضی فیلدها مثل createdAt یا updatedAt همیشه متفاوت هستند و نباید در تشخیص تکراری بودن دخالت کنند.
- Selected Fields: فقط فیلدهایی که شما مشخص میکنید مقایسه میشوند. این گزینه رایجترین حالت برای سناریوهای واقعی است.
پارامتر Fields To Compare
| نام پارامتر | نوع داده | توضیح کاربرد | مثال عملی |
|---|---|---|---|
| Fields To Compare | String / Field List | فیلدهایی را مشخص میکند که باید برای تشخیص تکراری بودن بررسی شوند. این پارامتر معمولاً وقتی فعال است که Compare روی Selected Fields قرار دارد. | email یا phone یا customer.id |
مثالهای کاربردی برای Fields To Compare:
- email: حذف مخاطبان تکراری بر اساس ایمیل
- phone: حذف مشتریان تکراری بر اساس شماره موبایل
- sku: حذف محصولات تکراری بر اساس کد محصول
- event_id: حذف رویدادهای تکراری دریافتی از Webhook
- customer.id: مقایسه مقدار یک فیلد تو در تو با استفاده از dot notation
پارامتر Fields To Exclude
| نام پارامتر | نوع داده | توضیح کاربرد | مثال عملی |
|---|---|---|---|
| Fields To Exclude | String / Field List | فیلدهایی را مشخص میکند که نباید در مقایسه دخالت داده شوند. این پارامتر معمولاً زمانی استفاده میشود که Compare روی All Fields Except قرار دارد. | createdAt, updatedAt, lastLogin |
این گزینه زمانی بسیار مفید است که رکوردها از نظر اطلاعات اصلی یکسان هستند، اما بعضی فیلدهای سیستمی یا زمانی در آنها متفاوت است.
مثال:
[ { "email": "ali@example.com", "name": "Ali", "createdAt": "2026-01-01T10:00:00" }, { "email": "ali@example.com", "name": "Ali", "createdAt": "2026-01-02T15:30:00" }]اگر Compare روی All Fields باشد، این دو آیتم تکراری محسوب نمیشوند چون مقدار createdAt متفاوت است. اما اگر Compare روی All Fields Except باشد و فیلد createdAt را در Fields To Exclude قرار دهید، یکی از آنها حذف میشود.
گزینه Disable Dot Notation
| نام پارامتر | نوع داده | توضیح کاربرد | مثال عملی |
|---|---|---|---|
| Disable Dot Notation | Boolean | مشخص میکند که نقطه در نام فیلد بهعنوان مسیر فیلدهای تو در تو در نظر گرفته شود یا بهعنوان بخشی از نام واقعی فیلد. | اگر فیلدی واقعاً با نام user.email دارید، این گزینه میتواند از تفسیر آن بهعنوان user سپس email جلوگیری کند. |
در N8N معمولاً برای دسترسی به فیلدهای تو در تو از dot notation استفاده میشود. برای مثال، مقدار customer.email یعنی فیلد email داخل آبجکت customer. اما گاهی نام واقعی یک فیلد خودش شامل نقطه است؛ در چنین حالتی گزینه Disable Dot Notation اهمیت پیدا میکند.
نکات مهم هنگام پیکربندی
- برای دادههایی مثل ایمیل، بهتر است قبل از Remove Duplicates مقدارها را با نود Set یا Code نرمالسازی کنید؛ مثلاً تبدیل به حروف کوچک و حذف فاصلههای اضافی.
- اگر فیلد انتخابشده در بعضی آیتمها وجود نداشته باشد، ممکن است چند آیتم با مقدار خالی یا undefined تکراری محسوب شوند.
- برای مقایسه دقیقتر، بهتر است بهجای مقایسه کل آیتم، از Selected Fields استفاده کنید.
- در دادههای حجیم، مقایسه همه فیلدها میتواند هزینه پردازشی بیشتری داشته باشد.
- مقایسه معمولاً روی دادههای JSON آیتمها انجام میشود؛ برای فایلهای binary بهتر است ابتدا متادیتا یا شناسه قابل مقایسه تولید شود.
ورودیها و خروجیها
ورودی نود
ورودی نود Remove Duplicates مجموعهای از آیتمهاست. هر آیتم در N8N معمولاً یک ساختار JSON دارد. این نود آیتمها را با توجه به تنظیمات Compare بررسی میکند و موارد تکراری را حذف میکند.
نمونه ورودی:
[ { "json": { "id": 1, "name": "Ali", "email": "ali@example.com", "city": "Tehran" } }, { "json": { "id": 2, "name": "Ali Reza", "email": "ali@example.com", "city": "Tehran" } }, { "json": { "id": 3, "name": "Sara", "email": "sara@example.com", "city": "Shiraz" } }]اگر تنظیمات نود به شکل زیر باشد:
- Compare: Selected Fields
- Fields To Compare: email
در این حالت آیتم اول و دوم تکراری محسوب میشوند، چون مقدار email آنها یکسان است.
خروجی نود
خروجی نود شامل آیتمهای یکتا است. از بین آیتمهای تکراری، معمولاً اولین آیتم دیدهشده نگه داشته میشود و آیتمهای بعدی که با همان معیار تکراری تشخیص داده شوند حذف میشوند.
نمونه خروجی:
[ { "json": { "id": 1, "name": "Ali", "email": "ali@example.com", "city": "Tehran" } }, { "json": { "id": 3, "name": "Sara", "email": "sara@example.com", "city": "Shiraz" } }]جدول مقایسه ورودی و خروجی
| مرحله | تعداد آیتمها | معیار مقایسه | نتیجه |
|---|---|---|---|
| Input | 3 | دو آیتم دارای ایمیل ali@example.com هستند. | |
| Remove Duplicates | پردازش | Selected Fields: email | آیتمهای دارای ایمیل تکراری شناسایی میشوند. |
| Output | 2 | فقط آیتمهای یکتا باقی میمانند. |
نکات پیشرفته و ترفندها
نرمالسازی دادهها قبل از حذف تکراریها
یکی از مهمترین نکات در استفاده از Remove Duplicates این است که دادهها قبل از مقایسه یکسانسازی شوند. برای مثال، این سه ایمیل از نظر کاربر یکسان هستند اما از نظر مقایسه رشتهای ممکن است متفاوت در نظر گرفته شوند:
Ali@Example.comali@example.com ali@example.com برای جلوگیری از این مشکل، قبل از Remove Duplicates از نود Set یا Code استفاده کنید و ایمیل را تمیز کنید.
نمونه منطق در نود Code:
return items.map(item => { item.json.email_normalized = item.json.email.trim().toLowerCase(); return item;});سپس در Remove Duplicates فیلد email_normalized را بهعنوان معیار مقایسه انتخاب کنید.
استفاده از کلید ترکیبی برای تشخیص تکراریها
گاهی یک فیلد بهتنهایی برای تشخیص تکراری بودن کافی نیست. برای مثال، ممکن است دو مشتری شماره سفارش مشابه در دو فروشگاه متفاوت داشته باشند. در این حالت بهتر است یک کلید ترکیبی بسازید.
نمونه:
return items.map(item => { item.json.unique_key = `${item.json.store_id}_${item.json.order_id}`; return item;});بعد از ساخت فیلد unique_key، نود Remove Duplicates را روی همین فیلد تنظیم کنید.
حذف تکراریها بعد از Merge
یکی از کاربردهای حرفهای این نود، قرار دادن آن بعد از نود Merge است. وقتی دو لیست از مخاطبان یا محصولات را با هم ترکیب میکنید، ممکن است رکوردهای مشترک وجود داشته باشد. Remove Duplicates میتواند خروجی Merge را تمیز کند.
- Google Sheets: دریافت لیست اول مخاطبان
- Airtable: دریافت لیست دوم مخاطبان
- Merge: ترکیب دو لیست
- Remove Duplicates: حذف مخاطبان تکراری بر اساس email
کنترل آیتم نگهداشتهشده با مرتبسازی قبلی
از آنجا که در حذف تکراریها معمولاً یکی از آیتمها باقی میماند، ترتیب آیتمها میتواند مهم باشد. اگر میخواهید جدیدترین یا کاملترین رکورد نگه داشته شود، بهتر است قبل از Remove Duplicates دادهها را مرتب کنید یا با نود Code اولویتبندی انجام دهید.
مثلاً اگر میخواهید رکورد دارای آخرین تاریخ بهروزرسانی باقی بماند، قبل از حذف تکراریها آیتمها را بر اساس updatedAt مرتب کنید.
استفاده از IF بعد از Remove Duplicates
بعد از حذف تکراریها میتوانید از نود IF برای بررسی شرایط خاص استفاده کنید. برای مثال، فقط مخاطبانی که ایمیل معتبر دارند به مرحله ارسال ایمیل بروند.
- Remove Duplicates: حذف ایمیلهای تکراری
- IF: بررسی وجود @ در ایمیل
- Email Send: ارسال ایمیل به مخاطبان معتبر
محدودیتها و خطاها
محدودیتها
- حذف تکراریها فقط در همان اجرای فعلی: این نود معمولاً آیتمهای موجود در همان اجرای ورکفلو را با هم مقایسه میکند. برای جلوگیری از تکرار بین اجراهای مختلف، باید از دیتابیس، Data Store یا سیستم مقصد برای بررسی سابقه استفاده شود.
- عدم تشخیص هوشمند شباهت: این نود مشابهت معنایی یا تقریبی را تشخیص نمیدهد. برای مثال، Ali و Ali Reza یکسان محسوب نمیشوند مگر اینکه خودتان معیار مشخصی بسازید.
- حساسیت به فرمت داده: مقدار ali@example.com با Ali@Example.com ممکن است متفاوت در نظر گرفته شود، مگر اینکه قبل از مقایسه نرمالسازی انجام شود.
- وابستگی به وجود فیلدها: اگر فیلد مقایسه در برخی آیتمها وجود نداشته باشد، نتیجه ممکن است مطابق انتظار نباشد.
- دادههای بسیار حجیم: در حجمهای بالا، نگهداری و مقایسه همه آیتمها میتواند مصرف حافظه و زمان اجرا را افزایش دهد.
خطاهای رایج و راهحلها
| مشکل | علت احتمالی | راهحل پیشنهادی |
|---|---|---|
| آیتمهای تکراری حذف نمیشوند | فیلد انتخابشده دقیقاً مقدار یکسان ندارد؛ مثلاً فاصله اضافه، حروف بزرگ و کوچک یا فرمت متفاوت وجود دارد. | قبل از Remove Duplicates دادهها را با Set یا Code نرمالسازی کنید. |
| آیتمهای غیرتکراری حذف میشوند | معیار مقایسه بیش از حد کلی انتخاب شده است؛ مثلاً فقط city یا status بررسی میشود. | از یک فیلد یکتا مثل email، phone، sku یا یک کلید ترکیبی استفاده کنید. |
| خروجی کمتر از انتظار است | در برخی آیتمها فیلد مقایسه خالی یا وجود ندارد و همه آنها مشابه تشخیص داده شدهاند. | قبل از حذف تکراریها با IF یا Code آیتمهای ناقص را جدا کنید. |
| فیلد تو در تو درست خوانده نمیشود | استفاده نادرست از dot notation یا وجود نقطه در نام واقعی فیلد. | مسیر فیلد را بررسی کنید و در صورت نیاز گزینه Disable Dot Notation را تغییر دهید. |
| اجرای ورکفلو کند میشود | تعداد آیتمها زیاد است یا Compare روی All Fields قرار دارد. | فقط فیلدهای ضروری را با Selected Fields مقایسه کنید و قبل از این نود دادههای غیرضروری را حذف کنید. |
ایده ها
- سیستم جلوگیری از ارسال پیام تکراری: دریافت شماره موبایل از چند کمپین تبلیغاتی، حذف شمارههای تکراری و ارسال پیامک فقط یکبار به هر کاربر.
- پاکسازی لیست خبرنامه: ترکیب ایمیلهای سایت، فرم ثبتنام و فایل CSV، سپس حذف ایمیلهای تکراری قبل از ارسال به Mailchimp یا Brevo.
- کنترل رویدادهای پرداخت: دریافت رویدادهای پرداخت از Webhook، حذف event_idهای تکراری و ثبت فقط تراکنشهای یکتا در دیتابیس.
- یکپارچهسازی محصولات چند تأمینکننده: ترکیب فایل محصولات چند تأمینکننده و حذف SKUهای تکراری قبل از بهروزرسانی فروشگاه.
- ساخت گزارش تمیز از دادههای چند منبعی: دریافت داده از Google Sheets، Airtable و API، حذف رکوردهای تکراری و تولید گزارش نهایی در قالب CSV یا داشبورد.
