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

MongoDB Query: อัปเดตเอกสารทั้งหมดที่ match IDs เฉพาะ


ใช้ updateMany() พร้อม $in Operator

เมธอด updateMany() อัปเดตทุกเอกสารที่ตรงกับ filter ร่วมกับ $in เพื่อระบุหลาย __id พร้อมกัน

ตัวอย่างข้อมูล

> db.demo476.insertOne({ _id: 1, "Name": "Chris" });
> db.demo476.insertOne({ _id: 2, "Name": "David" });
> db.demo476.insertOne({ _id: 3, "Name": "Bob" });
> db.demo476.insertOne({ _id: 4, "Name": "Carol" });

Query อัปเดต _id 1 และ 3 ให้ Name = "Robert"

> db.demo476.updateMany({ _id: { $in: [1, 3] } }, { $set: { Name: "Robert" } });
{ "acknowledged": true, "matchedCount": 2, "modifiedCount": 2 }

ผลลัพธ์

{ "_id": 1, "Name": "Robert" }
{ "_id": 2, "Name": "David" }
{ "_id": 3, "Name": "Robert" }
{ "_id": 4, "Name": "Carol" }

คำอธิบาย

  • $in: [1, 3] - match _id ที่เป็น 1 หรือ 3
  • $set: { Name: "Robert" } - อัปเดตเฉพาะฟิลด์ Name
  • matchedCount: 2 - เจอ 2 เอกสาร
  • modifiedCount: 2 - แก้ไข 2 เอกสาร (ค่าเดิมต่างจากค่าใหม่)

Operator อื่นสำหรับ Match หลายค่า

Operatorคำอธิบายตัวอย่าง
$inMatch ค่าใดค่าหนึ่งในอาร์เรย์{ _id: { $in: [1,2,3] } }
$ninMatch ค่าที่ **ไม่ใช่** ในอาร์เรย์{ _id: { $nin: [1,2,3] } }
$allMatch **ทุกค่า** ในอาร์เรย์ (สำหรับอาร์เรย์ field){ tags: { $all: ["tag1", "tag2"] } }

Bulk Operations (สำหรับจำนวนมาก)

// ใช้ bulkWrite สำหรับประสิทธิภาพดีกว่า (หลายพันรายการขึ้นไป)
const ops = [1,3,5,7,9].map(id => ({
  updateOne: { filter: { _id: id }, update: { $set: { Name: "Robert" } } }
}));
db.demo476.bulkWrite(ops);