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

ดึง (Pull) หลาย Object ออกจากอาร์เรย์ใน MongoDB

ใช้ $pull + $in ลบหลาย Object จากอาร์เรย์พร้อมกัน

เมื่อต้องการลบหลายรายการจากอาร์เรย์ของ Object ใช้ $pull ร่วมกับ $in บนฟิลด์เฉพาะใน Sub-document

ตัวอย่างข้อมูล: Client Personal Details

> db.pullMultipleObjectsDemo.insertOne({
    "ClientId": "100",
    "ClientName": "John",
    "ClientPersonalDetails": [
        { "ClientCountryName": "US", "ClientProjectName": "Online Book Store" },
        { "ClientCountryName": "AUS", "ClientProjectName": "Online Fee Management" },
        { "ClientCountryName": "UK", "ClientProjectName": "Online Pig Dice Game" },
        { "ClientCountryName": "ANGOLA", "ClientProjectName": "Online Hospital Management" }
    ]
});

คำสั่งลบ Project: "Online Book Store" และ "Online Pig Dice Game"

> db.pullMultipleObjectsDemo.update(
    { "_id": ObjectId("5cc7d0748f9e6ff3eb0ce43d") },
    { "$pull": { "ClientPersonalDetails": { "ClientProjectName": { $in: ["Online Book Store", "Online Pig Dice Game"] } } } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ผลลัพธ์: เหลือ AUS และ ANGOLA

{ "ClientPersonalDetails" : [
    { "ClientCountryName" : "AUS", "ClientProjectName" : "Online Fee Management" },
    { "ClientCountryName" : "ANGOLA", "ClientProjectName" : "Online Hospital Management" }
] }

คำอธิบาย

  • $in: ["A", "B"] Match ถ้าค่าอยู่ใน Array ใด Array หนึ่ง (OR Logic)
  • $pull จะลบ ทุก Object ในอาร์เรย์ที่ Match เงื่อนไข
  • Match ทุกฟิลด์ที่ระบุใน Object (ในที่นี้คือ ClientProjectName)

ขยาย: ลบด้วยเงื่อนไขซับซ้อน ($or, $and)

// ลบที่ (Country=US และ Project=Book) OR (Country=UK)
{ $pull: {
    ClientPersonalDetails: {
        $or: [
            { ClientCountryName: "US", ClientProjectName: "Online Book Store" },
            { ClientCountryName: "UK" }
        ]
    }
}}

// ลบที่ Project มีคำว่า "Online" และ Country ไม่ใช่ "US"
{ $pull: {
    ClientPersonalDetails: {
        ClientProjectName: /Online/,
        ClientCountryName: { $ne: "US" }
    }
}}