Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

การหาส่วนร่วมของอาร์เรย์สองชุดใน MongoDB ด้วย $setIntersection

หาค่าที่ซ้ำกันระหว่างอาร์เรย์สองชุดด้วย $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