ใช้ Operator $pull เพื่อลบ Element ออกจาก Array โดยระบุเงื่อนไขการจับคู่ Element ที่ต้องการลบ (Element ที่เป็น Document/Object)
สร้างคอลเลกชันและข้อมูลตัวอย่าง
> db.pullAnArrayElementDemo.insertOne({
"StudentDetails": [
{"StudentFirstName": "Chris", "StudentScore": 56},
{"StudentFirstName": "Robert", "StudentScore": 59}
]
});
{ "acknowledged": true, "insertedId": ObjectId("5cd3b55bedc6604c74817cd5") }
แสดงข้อมูลก่อนลบ
> db.pullAnArrayElementDemo.find().pretty();
ผลลัพธ์: Array มี 2 Elements
{
"_id": ObjectId("5cd3b55bedc6604c74817cd5"),
"StudentDetails": [
{"StudentFirstName": "Chris", "StudentScore": 56},
{"StudentFirstName": "Robert", "StudentScore": 59}
]
}
คำสั่ง: ลบ Element ที่ StudentFirstName = "Chris"
> db.pullAnArrayElementDemo.update(
{},
{$pull: {'StudentDetails': {'StudentFirstName': 'Chris'}}}
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
ตรวจสอบผลลัพธ์
> db.pullAnArrayElementDemo.find().pretty();
เหลือเฉพาะ Robert:
{
"_id": ObjectId("5cd3b55bedc6604c74817cd5"),
"StudentDetails": [
{"StudentFirstName": "Robert", "StudentScore": 59}
]
}
รายละเอียด $pull
- Syntax:
{$pull: {arrayField: {queryCondition}}} - ลบ ทุก Element ใน Array ที่ตรง Query Condition
- Query Condition ใช้ Operators ได้:
$gt, $lt, $in, $regexฯลฯ - ทำงานกับ Array of Objects และ Array of Primitive Values
ตัวอย่างเพิ่มเติม
// ลบ Score ต่ำกว่า 50
db.coll.update({}, {$pull: {"scores": {$lt: 50}}});
// ลบหลายเงื่อนไขใน Object เดียวกัน (ใช้ $elemMatch ไม่ได้ใน $pull โดยตรง)
db.coll.update({}, {$pull: {"StudentDetails": {StudentFirstName: "Chris", StudentScore: 56}}});
// ลบด้วย Multi: true (อัปเดตทุก Document ที่ Match)
db.coll.updateMany({}, {$pull: {"StudentDetails": {StudentFirstName: "Chris"}}});
Operator ที่เกี่ยวข้อง
| Operator | ความหมาย |
|---|---|
$pull | ลบ Element ที่ Match Condition |
$pullAll | ลบ Element ที่ตรงค่าที่ระบุทั้งหมด (Exact Values Array) |
$pop | ลบ Element ตัวแรก (-1) หรือตัวสุดท้าย (1) |
$push | เพิ่ม Element เข้า Array |
$addToSet | เพิ่ม Element หากยังไม่มี (Unique) |