ใช้ $pull ร่วมกับ update เพื่อลบค่าจากอาร์เรย์ตามเงื่อนไข
บทความนี้สาธิตวิธีการลบค่าออกจากอาร์เรย์ในทุกเอกสารของ Collection โดยใช้ $pull ร่วมกับ update() และเงื่อนไข $lt (น้อยกว่า) พร้อมตัวเลือก multi: true
ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง
สร้าง collection ชื่อ demo198 ซึ่งมีฟิลด์ List.Values เป็นอาร์เรย์ของตัวเลข
> db.demo198.insertOne({"List":{"Values":[10,20,30,30,70,80,90]}});
{ "acknowledged": true, "insertedId": ObjectId("5e3c224503d395bdc21346df") }
> db.demo198.insertOne({"List":{"Values":[56,978,56,34,23,34]}});
{ "acknowledged": true, "insertedId": ObjectId("5e3c225403d395bdc21346e0") }
> db.demo198.insertOne({"List":{"Values":[21,12,14,15,34,56]}});
{ "acknowledged": true, "insertedId": ObjectId("5e3c226603d395bdc21346e1") }
ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด
> db.demo198.find();
ผลลัพธ์:
{ "_id": ObjectId("5e3c224503d395bdc21346df"), "List": { "Values": [10, 20, 30, 30, 70, 80, 90] } }
{ "_id": ObjectId("5e3c225403d395bdc21346e0"), "List": { "Values": [56, 978, 56, 34, 23, 34] } }
{ "_id": ObjectId("5e3c226603d395bdc21346e1"), "List": { "Values": [21, 12, 14, 15, 34, 56] } }
ขั้นตอนที่ 3: ใช้ $pull เพื่อลบค่าที่น้อยกว่า 40 ในทุกเอกสาร
$pull จะลบค่าที่ตรงเงื่อนไข {$lt: 40} ออกจากอาร์เรย์ List.Values ในทุกเอกสาร (multi: true)
> db.demo198.update(
{},
{ "$pull": { "List.Values": { "$lt": 40 } } },
{ "multi": true }
);
WriteResult({ "nMatched": 3, "nUpserted": 0, "nModified": 3 })
ขั้นตอนที่ 4: ตรวจสอบผลลัพธ์หลังลบ
> db.demo198.find();
ผลลัพธ์:
{ "_id": ObjectId("5e3c224503d395bdc21346df"), "List": { "Values": [70, 80, 90] } }
{ "_id": ObjectId("5e3c225403d395bdc21346e0"), "List": { "Values": [56, 978, 56] } }
{ "_id": ObjectId("5e3c226603d395bdc21346e1"), "List": { "Values": [56] } }
สรุป: $pull ร่วมกับ multi: true ช่วยให้สามารถลบค่าที่ตรงเงื่อนไขออกจากอาร์เรย์ในทุกเอกสารของ Collection ได้ในคำสั่งเดียว โดยไม่ต้องวนลูปฝั่งแอปพลิเคชัน