หาค่าที่ซ้ำกันระหว่างอาร์เรย์สองชุดด้วย $setIntersection
ตัวดำเนินการ $setIntersection ใน Aggregation Pipeline ใช้สำหรับหาค่าที่ปรากฏใน ทั้งสองอาร์เรย์ (Intersection) โดยคืนค่าเป็นอาร์เรย์ที่มีเฉพาะค่าที่ซ้ำกัน (ไม่ซ้ำกัน Unique)
ตัวอย่างข้อมูลทดสอบ
> db.demo61.insertOne({
"Values1": [10, 20, 30, 40, 50],
"Values2": [30, 100, 70, 120, 40]
});
แสดงข้อมูล
> db.demo61.find().pretty();
ผลลัพธ์:
{
"_id": ObjectId("5e286e28cfb11e5c34d8992a"),
"Values1": [10, 20, 30, 40, 50],
"Values2": [30, 100, 70, 120, 40]
}
คำสั่งหาส่วนร่วมของ Values1 และ Values2
> db.demo61.aggregate([
{ $project: { BothValues: { $setIntersection: ["$Values1", "$Values2"] } } }
]);
ผลลัพธ์ที่ได้
{ "_id": ObjectId("5e286e28cfb11e5c34d8992a"), "BothValues": [30, 40] }
คำอธิบาย
- $setIntersection: ["$Values1", "$Values2"]: หาค่าที่อยู่ในทั้งสองอาร์เรย์
- ผลลัพธ์เป็นอาร์เรย์ที่ไม่มีค่าซ้ำ (Set behavior)
- ลำดับค่าในผลลัพธ์ไม่ได้รับประกัน
ตัวดำเนินการเซต (Set Operators) อื่นๆ ใน Aggregation
| Operator | คำอธิบาย |
|---|---|
| $setUnion | รวมค่าทั้งหมดจากทุกอาร์เรย์ (Union) ไม่ซ้ำ |
| $setIntersection | ค่าที่อยู่ในทุกอาร์เรย์ (Intersection) |
| $setDifference | ค่าที่อยู่ในอาร์เรย์แรก แต่ไม่อยู่ในอาร์เรย์อื่นๆ |
| $setIsSubset | ตรวจสอบว่าอาร์เรย์แรกเป็นสับเซตของอาร์เรย์ที่สอง |
| $setEquals | ตรวจสอบว่าสองอาร์เรย์มีค่าเหมือนกันทุกค่า |
กรณีใช้งานจริง
- หาสินค้าที่ลูกค้าสองคนซื้อร่วมกัน
- หาสกิลที่ตรงตามเงื่อนไขงาน
- หาเพื่อนร่วมกันใน Social Network