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

การใช้ $setIsSubset ใน MongoDB Aggregation เพื่อตรวจสอบ Subset

ตรวจสอบว่า 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 ไม่ส่งผล)