ใช้ $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" }
}
}}