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

ลบ Element ใน Array (ที่เป็น Document) ด้วย $pull ใน MongoDB

ใช้ 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)