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

การอัปเดตเอกสาร MongoDB ด้วย Student ID และ Name

อัปเดตเอกสารเฉพาะรายการด้วย update() และ $set

ใช้คำสั่ง update() (หรือ updateOne() ในรูปแบบใหม่) ร่วมกับ $set เพื่อเปลี่ยนแปลงค่าของฟิลด์เฉพาะในเอกสารที่ตรงตามเงื่อนไข

ตัวอย่างข้อมูลทดสอบ

> db.demo427.insertOne({ "StudentId": 101, "StudentName": "Chris Brown" });
> db.demo427.insertOne({ "StudentId": 102, "StudentName": "David Miller" });
> db.demo427.insertOne({ "StudentId": 103, "StudentName": "John Smith" });
> db.demo427.insertOne({ "StudentId": 104, "StudentName": "Carol Taylor" });

แสดงข้อมูลก่อนอัปเดต

> db.demo427.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "StudentId": 101, "StudentName": "Chris Brown" }
{ "_id": ObjectId("..."), "StudentId": 102, "StudentName": "David Miller" }
{ "_id": ObjectId("..."), "StudentId": 103, "StudentName": "John Smith" }
{ "_id": ObjectId("..."), "StudentId": 104, "StudentName": "Carol Taylor" }

คำสั่งอัปเดต StudentName ของ StudentId 102

> db.demo427.update({ "StudentId": 102 }, { $set: { "StudentName": "John Doe" } });

ผลลัพธ์: WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })

แสดงข้อมูลหลังอัปเดต

> db.demo427.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "StudentId": 101, "StudentName": "Chris Brown" }
{ "_id": ObjectId("..."), "StudentId": 102, "StudentName": "John Doe" }
{ "_id": ObjectId("..."), "StudentId": 103, "StudentName": "John Smith" }
{ "_id": ObjectId("..."), "StudentId": 104, "StudentName": "Carol Taylor" }

คำอธิบาย

  • Filter: { "StudentId": 102 }: ระบุเอกสารที่ต้องการอัปเดต (ควรใช้ฟิลด์ Unique)
  • Update: { $set: { "StudentName": "John Doe" } }: เปลี่ยนแปลงเฉพาะ StudentName
  • ฟิลด์อื่นๆ (StudentId, _id) คงค่าเดิม

รูปแบบใหม่ที่แนะนำ (MongoDB 3.2+)

> db.demo427.updateOne(
  { "StudentId": 102 },
  { $set: { "StudentName": "John Doe" } }
);
  • updateOne(): อัปเดตสูงสุด 1 เอกสาร (ชัดเจนกว่า update() ที่อาจ multi)
  • updateMany(): อัปเดตทุกเอกสารที่ match
  • replaceOne(): แทนที่เอกสารทั้งชิ้น (ไม่ต้องใช้ $set)

Best Practices

  • ใช้ Unique Field (เช่น _id, StudentId) ใน Filter เพื่อความแม่นยำ
  • ใช้ $set เสมอเพื่อป้องกันการทับซ้อนฟิลด์อื่น
  • ตรวจสอบ nMatched และ nModified ในผลลัพธ์