การอัปเดตข้อมูลใน MongoDB ใช้ method update() (รุ่นเก่า) หรือ updateOne()/updateMany() (รุ่นใหม่) ร่วมกับ update operators เช่น $set, $inc, $unset
สร้างคอลเลกชันและข้อมูลตัวอย่าง
> db.demo110.insertOne({"Name":"Chris"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2eeb949fd5fd66da21447b") }
> db.demo110.insertOne({"Name":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2eeb9f9fd5fd66da21447c") }
> db.demo110.insertOne({"Name":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2eeba39fd5fd66da21447d") }
แสดงข้อมูลก่อนอัปเดต
> db.demo110.find();
ผลลัพธ์:
{ "_id" : ObjectId("5e2eeb949fd5fd66da21447b"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2eeb9f9fd5fd66da21447c"), "Name" : "David" }
{ "_id" : ObjectId("5e2eeba39fd5fd66da21447d"), "Name" : "Bob" }
Query อัปเดต Name จาก David เป็น Robert
> db.demo110.update(
... {_id:ObjectId("5e2eeb9f9fd5fd66da21447c")},
... {$set:{"Name":"Robert"}}
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
คำอธิบาย:
- Filter:
{_id: ObjectId(...)}- ระบุ _id ที่ต้องการอัปเดต (แม่นยำที่สุด) $set: ตั้งค่า field ใหม่ (หาก field ไม่มีจะสร้างใหม่)- WriteResult: nMatched=1 (เจอ 1 เอกสาร), nModified=1 (แก้ไข 1 เอกสาร)
ผลลัพธ์หลังอัปเดต
> db.demo110.find();
ผลลัพธ์:
{ "_id" : ObjectId("5e2eeb949fd5fd66da21447b"), "Name" : "Chris" }
{ "_id" : ObjectId("5e2eeb9f9fd5fd66da21447c"), "Name" : "Robert" }
{ "_id" : ObjectId("5e2eeba39fd5fd66da21447d"), "Name" : "Bob" }
Update Operators ที่นิยมใช้
| Operator | คำอธิบาย | ตัวอย่าง |
|---|---|---|
$set | ตั้งค่า field | {$set: {"age": 25}} |
$inc | เพิ่ม/ลดค่าเลข | {$inc: {"score": 10}} |
$unset | ลบ field | {$unset: {"oldField": ""}} |
$push | เพิ่ม element ใน array | {$push: {"tags": "new"}} |
$pull | ลบ element ใน array | {$pull: {"tags": "old"}} |
$addToSet | เพิ่มใน array หากยังไม่มี | {$addToSet: {"tags": "unique"}} |