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

อัปเดตเอกสารใน MongoDB โดยไม่ทับฟิลด์เดิม

ใช้ $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 } }
);