ตรวจสอบว่า Array เป็น Subset ของอีก Array ด้วย $setIsSubset
บทความนี้สาธิตการใช้ $setIsSubset ในขั้นตอน $project ของ Aggregation Pipeline เพื่อตรวจสอบว่าอาร์เรย์หนึ่งเป็น Subset (ชุดย่อย) ของอีกอาร์เรย์หนึ่งหรือไม่
ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง
> db.subsetDemo.insertOne({"StudentName":"Chris","StudentFavouriteSubject":["Java","Python"]});
{ "acknowledged": true, "insertedId": ObjectId("5e063e49150ee0e76c06a052") }
> db.subsetDemo.insertOne({"StudentName":"Chris","StudentFavouriteSubject":["Java","Python","MySQL"]});
{ "acknowledged": true, "insertedId": ObjectId("5e063e4f150ee0e76c06a053") }
ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด
> db.subsetDemo.find().pretty();
ผลลัพธ์: เอกสารแรกมี [Java, Python], เอกสารที่สองมี [Java, Python, MySQL]
ขั้นตอนที่ 3: ใช้ $setIsSubset ตรวจสอบว่า ["MySQL"] เป็น Subset ของ StudentFavouriteSubject
> db.subsetDemo.aggregate([
{ "$project": {
"_id": 0,
"StudentName": 1,
"isMySQL": {
"$setIsSubset": [["MySQL"], "$StudentFavouriteSubject"]
}
}}
]);
ผลลัพธ์ที่ได้
{ "StudentName": "Chris", "isMySQL": false }
{ "StudentName": "Chris", "isMySQL": true }
สรุป: $setIsSubset คืนค่า true หากอาร์เรย์แรก (["MySQL"]) เป็น Subset ของอาร์เรย์ที่สอง ($StudentFavouriteSubject) ทุก Element ต้องมีอยู่ในอาร์เรย์ปลายทาง (Order ไม่สำคัญ, Duplicate ไม่ส่งผล)