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

MongoDB อัปเดตเอกสารบางส่วนด้วย multi: true (Legacy)

ใน 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: falseDefault = Update All Matched
ต้องระบุ {multi:true}ไม่ต้องระบุ multi
คืน WriteResult (nMatched, nModified)คืน Object (matchedCount, modifiedCount)
Deprecated ใน Driver ใหม่ๆStandard API