ใช้ $set อัปเดทเฉพาะฟิลด์ที่ต้องการ
โอเปอเรเตอร์ $set ช่วยให้เพิ่มหรือแก้ไขฟิลด์เฉพาะโดยไม่กระทบฟิลด์อื่นๆ ในเอกสารเดียวกัน
ตัวอย่างข้อมูล
> db.updateRecordDemo.insertOne({"StudentName":"Larry"});
> db.updateRecordDemo.insertOne({"StudentName":"David"});
> db.updateRecordDemo.insertOne({"StudentName":"Mike"});
คำสั่งเพิ่มฟิลด์ StudentAge ให้เฉพาะเอกสารที่ _id ตรงกัน
> db.updateRecordDemo.update(
{ "_id" : ObjectId("5cbd6f9cde8cc557214c0e0b") },
{ $set: { "StudentAge": 24 } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
ผลลัพธ์
> db.updateRecordDemo.find().pretty();
{ "_id" : ObjectId("5cbd6f95de8cc557214c0e0a"), "StudentName" : "Larry" }
{ "_id" : ObjectId("5cbd6f9cde8cc557214c0e0b"), "StudentName" : "David", "StudentAge" : 24 }
{ "_id" : ObjectId("5cbd6f9dde8cc557214c0e0c"), "StudentName" : "Mike" }
ข้อสังเกตสำคัญ
- เอกสารแรกและสาม ไม่มีการเปลี่ยนแปลง คงฟิลด์เดิมไว้ทั้งหมด
- เอกสารที่สอง เพิ่มฟิลด์
StudentAgeใหม่ เข้าไป - หากไม่ใช้
$setและส่งออบเจ็กต์ใหม่ทั้งหมด จะเกิดการ แทนที่เอกสารทั้งหมด (Replacement)
รูปแบบสมัยใหม่
// อัปเดทเอกสารเดียว
db.updateRecordDemo.updateOne(
{ "_id": ObjectId("...") },
{ $set: { "StudentAge": 24 } }
);
// อัปเดทหลายเอกสาร
db.updateRecordDemo.updateMany(
{ "StudentName": "David" },
{ $set: { "StudentAge": 24 } }
);