การใช้งาน $pull เพื่อลบค่าจากอาร์เรย์ใน MongoDB
เมื่อต้องการลบค่าที่เฉพาะเจาะจงออกจากอาร์เรย์ในเอกสาร MongoDB สามารถใช้ตัวดำเนินการ $pull ร่วมกับตัวเลือก multi: true เพื่อให้การลบเกิดขึ้นกับทุกเอกสารที่ตรงตามเงื่อนไข
ตัวอย่างข้อมูลทดสอบ
ขั้นแรก ให้สร้างคอลเลกชันและเพิ่มเอกสารตัวอย่างดังนี้:
> db.demo392.insertOne({
Name: 'Chris',
details: [
{ _id: '101' },
{ _id: '102' }
]
});
> db.demo392.insertOne({
Name: 'Chris',
details: [
{ _id: '104' },
{ _id: '101' }
]
});
แสดงข้อมูลทั้งหมดก่อนการลบ
> db.demo392.find();
ผลลัพธ์ที่ได้:
{
"_id": ObjectId("5e5d2b3322064be7ab44e802"),
"Name": "Chris",
"details": [ { "_id": "101" }, { "_id": "102" } ]
}
{
"_id": ObjectId("5e5d2b3422064be7ab44e803"),
"Name": "Chris",
"details": [ { "_id": "104" }, { "_id": "101" } ]
}
คำสั่งลบค่า _id: '101' ออกจากอาร์เรย์ details
> db.demo392.update(
{},
{ $pull: { details: { _id: '101' } } },
{ multi: true }
)
ผลลัพธ์: WriteResult({ "nMatched": 2, "nUpserted": 0, "nModified": 2 })
แสดงข้อมูลหลังการลบ
> db.demo392.find();
ผลลัพธ์ที่ได้:
{
"_id": ObjectId("5e5d2b3322064be7ab44e802"),
"Name": "Chris",
"details": [ { "_id": "102" } ]
}
{
"_id": ObjectId("5e5d2b3422064be7ab44e803"),
"Name": "Chris",
"details": [ { "_id": "104" } ]
}
สรุป
- ใช้ $pull เพื่อลบองค์ประกอบที่ตรงตามเงื่อนไขออกจากอาร์เรย์
- กำหนด multi: true เพื่อให้มีผลกับทุกเอกสารที่ตรงกับเงื่อนไขค้นหา (query filter)
- ในตัวอย่าง ใช้ query filter ว่าง
{}หมายถึงทุกเอกสารในคอลเลกชัน