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

การอัปเดตข้อมูลใน MongoDB ด้วย update()

การอัปเดตข้อมูลใน 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 ที่นิยมใช้

วิธีใหม่ที่แนะนำ (MongoDB 3.2+)

// อัปเดต 1 เอกสาร
db.demo110.updateOne(
  {_id: ObjectId("5e2eeb9f9fd5fd66da21447c")},
  {$set: {"Name": "Robert"}}
)

// อัปเดตหลายเอกสาร
db.demo110.updateMany(
  {"Name": "Chris"},
  {$set: {"Name": "Christopher"}}
)

Upsert: เพิ่ม upsert: true เพื่อสร้างเอกสารใหม่หากไม่เจอ:

db.demo110.updateOne(
  {"Name": "NewUser"},
  {$set: {"Name": "NewUser", "CreatedAt": new Date()}},
  {upsert: true}
)
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"}}