ใช้ $pull ลบ Element เฉพาะออกจากอาร์เรย์
โอเปอเรเตอร์ $pull ลบ Element ที่ Match ค่าที่ระบุออกจาก Array โดยอัตโนมัติจัด Index ใหม่
ตัวอย่างข้อมูล
> db.pullElementFromAnArrayDemo.insertOne({"StudentScores":[89,56,78,90]});
คำสั่งลบค่า 78 ออกจาก StudentScores
> db.pullElementFromAnArrayDemo.update({}, { $pull: { StudentScores: 78 } });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ผลลัพธ์: 78 หายไป
> db.pullElementFromAnArrayDemo.find();
{ "_id" : ObjectId("5cd0104a588d4a6447b2e063"), "StudentScores" : [ 89, 56, 90 ] }
คุณสมบัติของ $pull
- ลบ ทุก Element ที่ Match (ถ้ามี 78 หลายตัว จะหายหมด)
- ทำงานกับ Primitive Values (String, Number, Boolean)
- ทำงานกับ Objects/Sub-documents (Match ทุกฟิลด์ที่ระบุ)
- Atomic ต่อ Document
รูปแบบการใช้งาน
// 1. ลบค่า Primitive
{ $pull: { scores: 78 } }
// 2. ลบ Object ที่ Match ทุก Field
{ $pull: { items: { name: "Pen", color: "blue" } } }
// 3. ลบด้วย Condition (Query Operator ใน Object)
{ $pull: { items: { price: { $lt: 10 } } } }
// 4. ลบหลายค่า ($in)
{ $pull: { tags: { $in: ["old", "deprecated"] } } }
ความแตกต่าง $pull vs $pop vs $set
| Operator | พฤติกรรม | Use Case |
|---|---|---|
$pull | ลบ Element ที่ Match Value/Condition | ลบเฉพาะค่าที่ต้องการ |
$pop | ลบ Element แรก ( -1 ) หรือสุดท้าย ( 1 ) | Queue/Stack Behavior |
$set: { arr: [] } | Clear ทั้ง Array | ลบทั้งหมด (Reset) |
$unset: { arr: 1 } | ลบ Field Array เลย | ลบ Field ทิ้ง |
Modern Syntax
db.pullElementFromAnArrayDemo.updateOne(
{},
{ $pull: { StudentScores: 78 } }
);