Merge#
ใช้ Merge node เพื่อรวมข้อมูลจากหลายสตรีม เมื่อข้อมูลของทุกสตรีมพร้อมใช้งาน
การเปลี่ยนแปลงที่สำคัญในเวอร์ชัน 0.194.0
ทีม n8n ได้ปรับปรุง node นี้ครั้งใหญ่ใน n8n เวอร์ชัน 0.194.0 เอกสารนี้อธิบาย node เวอร์ชันล่าสุด หากคุณใช้ n8n เวอร์ชันเก่า คุณสามารถดูเอกสารเวอร์ชันก่อนหน้าได้ ที่นี่
การเปลี่ยนแปลงเล็กน้อยในเวอร์ชัน 1.49.0
n8n เวอร์ชัน 1.49.0 ได้เพิ่มตัวเลือกในการเพิ่มอินพุตมากกว่าสองอินพุต เวอร์ชันเก่ารองรับได้สูงสุดเพียงสองอินพุต หากคุณใช้เวอร์ชันเก่าและต้องการรวมอินพุตหลายรายการในเวอร์ชันเหล่านั้น ให้ใช้ Code node
ฟีเจอร์ Mode > SQL Query ถูกเพิ่มเข้ามาใน n8n เวอร์ชัน 1.49.0 และไม่มีในเวอร์ชันเก่า
Node parameters#
คุณสามารถระบุวิธีที่ Merge node ควรจะรวมข้อมูลจากสตรีมข้อมูลต่างๆ โดยเลือก Mode:
Append#
เก็บข้อมูลจากอินพุตทั้งหมด เลือก Number of Inputs เพื่อส่งออกรายการของแต่ละอินพุตทีละรายการ node จะรอการดำเนินการของอินพุตที่เชื่อมต่อทั้งหมด
 
Combine#
รวมข้อมูลจากสองอินพุต เลือกตัวเลือกใน Combine By เพื่อกำหนดวิธีที่คุณต้องการรวมข้อมูลอินพุต
Matching Fields#
เปรียบเทียบรายการตามค่าฟิลด์ ป้อนฟิลด์ที่คุณต้องการเปรียบเทียบใน Fields to Match
พฤติกรรมเริ่มต้นของ n8n คือการเก็บรายการที่ตรงกัน คุณสามารถเปลี่ยนสิ่งนี้ได้โดยใช้การตั้งค่า Output Type:
- Keep Matches: รวมรายการที่ตรงกัน เหมือนกับการทำ inner join
- Keep Non-Matches: รวมรายการที่ไม่ตรงกัน
- Keep Everything: รวมรายการที่ตรงกันเข้าด้วยกันและรวมรายการที่ไม่ตรงกันด้วย เหมือนกับการทำ outer join
- Enrich Input 1: เก็บข้อมูลทั้งหมดจาก Input 1 และเพิ่มข้อมูลที่ตรงกันจาก Input 2 เหมือนกับการทำ left join
- Enrich Input 2: เก็บข้อมูลทั้งหมดจาก Input 2 และเพิ่มข้อมูลที่ตรงกันจาก Input 1 เหมือนกับการทำ right join
 
Position#
รวมรายการตามลำดับ รายการที่ index 0 ใน Input 1 จะรวมกับรายการที่ index 0 ใน Input 2 และต่อไปเรื่อยๆ
 
All Possible Combinations#
ส่งออกชุดค่าผสมที่เป็นไปได้ทั้งหมดของรายการ ในขณะที่รวมฟิลด์ที่มีชื่อเดียวกัน
 
Combine mode options#
เมื่อรวมข้อมูลโดยใช้ Mode > Combine คุณสามารถตั้งค่า Options เหล่านี้ได้:
- Clash Handling: เลือกวิธีรวมเมื่อสตรีมข้อมูลขัดแย้งกัน หรือเมื่อมีฟิลด์ย่อย อ้างอิงถึง Clash handling สำหรับรายละเอียด
- Fuzzy Compare: เลือกว่าจะยอมรับความแตกต่างของประเภทเมื่อเปรียบเทียบฟิลด์หรือไม่ (เปิดใช้งาน) หรือไม่ (ปิดใช้งาน, ค่าเริ่มต้น) ตัวอย่างเช่น เมื่อคุณเปิดใช้งานสิ่งนี้ n8n จะถือว่า "3"และ3เหมือนกัน
- Disable Dot Notation: ป้องกันการเข้าถึงฟิลด์ลูกโดยใช้ parent.childในชื่อฟิลด์
- Multiple Matches: เลือกวิธีที่ n8n จัดการกับการจับคู่หลายรายการเมื่อเปรียบเทียบสตรีมข้อมูล- Include All Matches: ส่งออกหลายรายการหากมีการจับคู่หลายรายการ หนึ่งรายการสำหรับการจับคู่แต่ละครั้ง
- Include First Match Only: เก็บรายการแรกต่อการจับคู่และทิ้งการจับคู่หลายรายการที่เหลือ
 
- Include Any Unpaired Items: เลือกว่าจะเก็บหรือทิ้งรายการที่ไม่มีคู่เมื่อรวมตามตำแหน่ง พฤติกรรมเริ่มต้นคือการละเว้นรายการที่ไม่มีการจับคู่
Clash Handling#
หากหลาย items ที่ index เดียวกันมี field ที่มีชื่อเหมือนกัน นี่คือการ clash ตัวอย่างเช่น หาก items ทั้งหมดใน Input 1 และ Input 2 มี field ชื่อ language field เหล่านี้จะ clash โดยค่าเริ่มต้น n8n จะให้ความสำคัญกับ Input 2 หมายความว่าหาก language มีค่าใน Input 2 n8n จะใช้ค่านั้นเมื่อ merge items
คุณสามารถเปลี่ยนพฤติกรรมนี้ได้โดยเลือก Options > Clash Handling:
- When Field Values Clash: เลือก input ที่จะให้ความสำคัญ หรือเลือก Always Add Input Number to Field Names เพื่อเก็บ field และค่าทั้งหมด โดยมีหมายเลข input ต่อท้ายชื่อ field เพื่อแสดงว่ามาจาก input ใด
- Merging Nested Fields- Deep Merge: Merge properties ในทุกระดับของ items รวมถึง nested objects สิ่งนี้มีประโยชน์เมื่อต้องจัดการกับโครงสร้างข้อมูลที่ซับซ้อนและซ้อนกัน ซึ่งคุณต้องแน่ใจว่ามีการ merge properties ในทุกระดับ
- Shallow Merge: Merge properties ที่ระดับบนสุดของ items เท่านั้น โดยไม่ merge nested objects สิ่งนี้มีประโยชน์เมื่อคุณมีโครงสร้างข้อมูลแบบ flat หรือเมื่อคุณต้องการ merge เฉพาะ top-level properties โดยไม่ต้องกังวลเกี่ยวกับ nested properties
 
SQL Query#
เขียน SQL Query แบบกำหนดเองเพื่อรวมข้อมูล
ตัวอย่าง:
| 1 |  | 
ข้อมูลจาก node ก่อนหน้ามีให้ใช้งานเป็นตาราง และคุณสามารถใช้ใน SQL query เป็น input1, input2, input3 และอื่นๆ ตามลำดับ อ้างอิงถึง AlaSQL GitHub page สำหรับรายการคำสั่ง SQL ที่รองรับทั้งหมด
Choose Branch#
เลือกอินพุตที่จะเก็บ ตัวเลือกนี้จะรอจนกว่าข้อมูลจากอินพุตทั้งสองจะพร้อมใช้งานเสมอ คุณสามารถเลือกที่จะ Output:
- Input 1 Data
- Input 2 Data
- A Single, Empty Item
node จะส่งออกข้อมูลจากอินพุตที่เลือก โดยไม่มีการเปลี่ยนแปลง
Templates and examples#
Merging data streams with uneven numbers of items#
รายการที่ส่งไปยัง Input 1 ของ Merge node จะมีความสำคัญกว่า ตัวอย่างเช่น หาก Merge node ได้รับห้ารายการใน Input 1 และ 10 รายการใน Input 2 มันจะประมวลผลเพียงห้ารายการเท่านั้น รายการที่เหลืออีกห้ารายการจาก Input 2 จะไม่ถูกประมวลผล
Branch execution with If and Merge nodes#
0.236.0 และต่ำกว่า
n8n ได้ลบพฤติกรรมการ execution นี้ในเวอร์ชัน 1.0 ส่วนนี้ใช้กับ workflows ที่ใช้ลำดับการ execution แบบ v0 (legacy) โดยค่าเริ่มต้น นี่คือ workflows ทั้งหมดที่สร้างก่อนเวอร์ชัน 1.0 คุณสามารถเปลี่ยนลำดับการ execution ได้ใน workflow settings
หากคุณเพิ่ม Merge node ไปยัง workflow ที่มี If node อาจส่งผลให้ data streams ทั้งสองของ If node ทำงาน
Data stream หนึ่งจะ trigger Merge node ซึ่งจากนั้นจะไป execute data stream อีกอัน
ตัวอย่างเช่น ในภาพหน้าจอด้านล่าง มี workflow ที่มี Edit Fields node, If node และ Merge node พฤติกรรมมาตรฐานของ If node คือการ execute data stream เดียว (ในภาพหน้าจอคือ output true) อย่างไรก็ตาม เนื่องจากมี Merge node ทำให้ data streams ทั้งสองทำงาน แม้ว่า If node จะไม่ได้ส่งข้อมูลใดๆ ไปยัง data stream false ก็ตาม
Try it out: A step by step example#
สร้าง workflow พร้อมข้อมูลอินพุตตัวอย่างเพื่อลองใช้ Merge node
Set up sample data using the Code nodes#
- เพิ่ม Code node ลงใน canvas และเชื่อมต่อกับ Start node
- วางโค้ด JavaScript ต่อไปนี้ในฟิลด์ JavaScript Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 return [ { json: { name: 'Stefan', language: 'de', } }, { json: { name: 'Jim', language: 'en', } }, { json: { name: 'Hans', language: 'de', } } ];
- เพิ่ม Code node ที่สอง และเชื่อมต่อกับ Start node
- วางโค้ด JavaScript ต่อไปนี้ในฟิลด์ JavaScript Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 return [ { json: { greeting: 'Hello', language: 'en', } }, { json: { greeting: 'Hallo', language: 'de', } } ];
Try out different merge modes#
เพิ่ม Merge node เชื่อมต่อ Code node แรกกับ Input 1 และ Code node ที่สองกับ Input 2 รัน workflow เพื่อโหลดข้อมูลลงใน Merge node
workflow สุดท้ายควรมีลักษณะดังนี้:
ตอนนี้ลองใช้ตัวเลือกต่างๆ ใน Mode เพื่อดูว่ามีผลต่อข้อมูลเอาต์พุตอย่างไร
Append#
เลือก Mode > Append จากนั้นเลือก Test step
เอาต์พุตของคุณในมุมมองตารางควรมีลักษณะดังนี้:
| name | language | greeting | 
|---|---|---|
| Stefan | de | |
| Jim | en | |
| Hans | de | |
| en | Hello | |
| de | Hallo | 
Combine by Matching Fields#
คุณสามารถรวมข้อมูลอินพุตทั้งสองนี้เพื่อให้แต่ละคนได้รับคำทักทายที่ถูกต้องสำหรับภาษาของพวกเขา
- เลือก Mode > Combine
- เลือก Combine by > Matching Fields
- ในทั้ง Input 1 Field และ Input 2 Field ป้อน languageสิ่งนี้จะบอก n8n ให้รวมข้อมูลโดยการจับคู่ค่าในฟิลด์languageในแต่ละชุดข้อมูล
- เลือก Test step
เอาต์พุตของคุณในมุมมองตารางควรมีลักษณะดังนี้:
| name | language | greeting | 
|---|---|---|
| Stefan | de | Hallo | 
| Jim | en | Hello | 
| Hans | de | Hallo | 
Combine by Position#
เลือก Mode > Combine, Combine by > Position จากนั้นเลือก Test step
เอาต์พุตของคุณในมุมมองตารางควรมีลักษณะดังนี้:
| name | language | greeting | 
|---|---|---|
| Stefan | en | Hello | 
| Jim | de | Hallo | 
Keep unpaired items#
หากคุณต้องการเก็บรายการทั้งหมด ให้เลือก Add Option > Include Any Unpaired Items จากนั้นเปิด Include Any Unpaired Items
เอาต์พุตของคุณในมุมมองตารางควรมีลักษณะดังนี้:
| name | language | greeting | 
|---|---|---|
| Stefan | en | Hello | 
| Jim | de | Hallo | 
| Hans | de | 
Combine by All Possible Combinations#
เลือก Mode > Combine, Combine by > All Possible Combinations จากนั้นเลือก Test step
เอาต์พุตของคุณในมุมมองตารางควรมีลักษณะดังนี้:
| name | language | greeting | 
|---|---|---|
| Stefan | en | Hello | 
| Stefan | de | Hallo | 
| Jim | en | Hello | 
| Jim | de | Hallo | 
| Hans | en | Hello | 
| Hans | de | Hallo | 
