ใน MongoDB Legacy (ก่อน 3.2) การ Update หลายเอกสารพร้อมกันต้องใช้ Option multi: true เนื้อหานี้สาธิตการเปลี่ยน FirstName จาก "Robert" เป็น "Sam" ทุกเอกสารที่ Match
ตัวอย่างข้อมูลทดสอบ
> db.demo312.insertOne({"FirstName":"Robert"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ce16f8647eb59e56204a") }
> db.demo312.insertOne({"FirstName":"Bob"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ce19f8647eb59e56204b") }
> db.demo312.insertOne({"FirstName":"Robert"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ce1cf8647eb59e56204c") }
> db.demo312.insertOne({"FirstName":"David"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ce20f8647eb59e56204d") }
> db.demo312.insertOne({"FirstName":"Robert"});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50ce22f8647eb59e56204e") }
แสดงข้อมูลก่อนอัปเดต
> db.demo312.find();
{
"_id" : ObjectId("5e50ce16f8647eb59e56204a"),
"FirstName" : "Robert"
}
{
"_id" : ObjectId("5e50ce19f8647eb59e56204b"),
"FirstName" : "Bob"
}
{
"_id" : ObjectId("5e50ce1cf8647eb59e56204c"),
"FirstName" : "Robert"
}
{
"_id" : ObjectId("5e50ce20f8647eb59e56204d"),
"FirstName" : "David"
}
{
"_id" : ObjectId("5e50ce22f8647eb59e56204e"),
"FirstName" : "Robert"
}
Query Update หลายเอกสาร (Legacy Syntax)
> db.demo312.update(
{"FirstName":"Robert"},
{$set:{"FirstName":"Sam"}},
{multi:true}
);
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })
ผลลัพธ์หลังอัปเดต
> db.demo312.find();
{
"_id" : ObjectId("5e50ce16f8647eb59e56204a"),
"FirstName" : "Sam"
}
{
"_id" : ObjectId("5e50ce19f8647eb59e56204b"),
"FirstName" : "Bob"
}
{
"_id" : ObjectId("5e50ce1cf8647eb59e56204c"),
"FirstName" : "Sam"
}
{
"_id" : ObjectId("5e50ce20f8647eb59e56204d"),
"FirstName" : "David"
}
{
"_id" : ObjectId("5e50ce22f8647eb59e56204e"),
"FirstName" : "Sam"
}
Syntax ใหม่ (MongoDB 3.2+) - แนะนำใช้
> db.demo312.updateMany(
{"FirstName": "Robert"},
{$set: {"FirstName": "Sam"}}
);
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
เปรียบเทียบ
| Legacy update() | Modern updateMany() |
|---|---|
| Default multi: false | Default = Update All Matched |
| ต้องระบุ {multi:true} | ไม่ต้องระบุ multi |
| คืน WriteResult (nMatched, nModified) | คืน Object (matchedCount, modifiedCount) |
| Deprecated ใน Driver ใหม่ๆ | Standard API |