ใช้ 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" }- อัปเดตเฉพาะฟิลด์ NamematchedCount: 2- เจอ 2 เอกสารmodifiedCount: 2- แก้ไข 2 เอกสาร (ค่าเดิมต่างจากค่าใหม่)
Operator อื่นสำหรับ Match หลายค่า
| Operator | คำอธิบาย | ตัวอย่าง |
|---|---|---|
$in | Match ค่าใดค่าหนึ่งในอาร์เรย์ | { _id: { $in: [1,2,3] } } |
$nin | Match ค่าที่ **ไม่ใช่** ในอาร์เรย์ | { _id: { $nin: [1,2,3] } } |
$all | Match **ทุกค่า** ในอาร์เรย์ (สำหรับอาร์เรย์ 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);