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

การอัปเดตแบบมีเงื่อนไข (Conditional Update) ใน MongoDB

อัปเดตเอกสารเฉพาะที่ตรงตามเงื่อนไขด้วย update() และ upsert

คำสั่ง update() ใน MongoDB สามารถทำงานแบบมีเงื่อนไขได้ โดยระบุ filter condition และใช้ upsert: true เพื่อสร้างเอกสารใหม่หากไม่พบเอกสารที่ตรงเงื่อนไข

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

> db.demo402.insertOne({ id: 101, "Name": "Chris" });
> db.demo402.insertOne({ id: 102, "Name": "David" });
> db.demo402.insertOne({ id: 103, "Name": "Mike" });

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

> db.demo402.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "id": 101, "Name": "Chris" }
{ "_id": ObjectId("..."), "id": 102, "Name": "David" }
{ "_id": ObjectId("..."), "id": 103, "Name": "Mike" }

คำสั่งอัปเดต Name ของ id=102 เป็น Robert (พร้อม upsert)

> db.demo402.update(
  { id: 102 },
  { $set: { Name: "Robert" } },
  { upsert: true }
);

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

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

> db.demo402.find();

ผลลัพธ์:

{ "_id": ObjectId("..."), "id": 101, "Name": "Chris" }
{ "_id": ObjectId("..."), "id": 102, "Name": "Robert" }
{ "_id": ObjectId("..."), "id": 103, "Name": "Mike" }

คำอธิบายพารามิเตอร์

  • Filter: { id: 102 }: เงื่อนไขค้นหาเอกสารที่ต้องการอัปเดต
  • Update: { $set: { Name: "Robert" } }: ใช้ $set เพื่อเปลี่ยนแปลงเฉพาะฟิลด์ Name
  • Options: { upsert: true }: หากไม่พบเอกสาร id=102 จะสร้างเอกสารใหม่

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

> db.demo402.updateOne(
  { id: 102 },
  { $set: { Name: "Robert" } },
  { upsert: true }
);

ใช้ updateOne() สำหรับอัปเดต 1 เอกสาร หรือ updateMany() สำหรับหลายเอกสาร